在工作中,发现不少同学对Git的把握十分根底,同样作为版本控制系统,运用好Git比SVN要更有应战,需求对Git有必定的了解,才干在工作中,驾御好Git。
本文从最简略的根底入门,解说工作中常用的Git根底,把握这些是Git进阶的根底,满足日常工作场景。
装置
学习 git 前,你需求先装置 git,git 装置流程请移步这儿,里边有各个渠道的装置办法
根底
学习指令行工具要学会的第一步便是检查协助文档,能够用下面的指令检查 git 的协助信息
git help
git help xxx
git xxx --help
git xxx -h
接下来便是一些自定义信息了,比方装备用户名和方便指令(别号)
git config --global user.name yanhaijing
git config --global user.email yanhaijing@yeah.net
git config --global alias.st status #git st
git config --global alias.co checkout #git co
git config --global alias.br branch #git br
git config --global alias.ci commit #git ci
值得一提的便是装备换行符了,windows 上的换行符和 mac 和类 unix 不相同,在跨渠道时就痛苦了,为了一致,能够将提交到库房的换行符同装备成 unix 格式
git config --global core.autocrlf input
假如想把 git 库房提交到服务器,或许还要装备秘钥,假如你不想每次都输入暗码的话
ssh-keygen -t rsa -C yanxuefeng@baidu.com # 生成秘钥
cat ~/.ssh/id_rsa.pub # 获取公钥,装备到github 的sshkey
ssh -T git@github.com # 测试是否收效
玩转 git 的第一步,你需求有一个库房,获取库房总共有两种办法
git init # 初始化一个库房
git clone url # 克隆一个已有库房
有时候咱们不想把某些文件提交到库房里,比方编译产生的临时文件,此刻.gitignore 能够发挥作用,.gitignore 的规矩如下
- # 代表注释
- 每行是一个 path,glob 模式匹配
- !代表取非
- *代表 0 个或多个字符
- ?代表一个字符
- []代表集合
.gitattributes 这个还没想好怎样讲,挖个坑坑坑坑
git 库房的工作流如下
git 的文件状况如下
想检查当时的库房状况能够运用git status
,这个指令能够给出很多提示信息,建议经常运用
关于 commit 的提交,每个 commit 有必要是独立,完好的功用,坚持适当粒度,不要过大也不要过小;关于提交信息的描绘能够参阅下开源届的标准,也能够看下我之前整理的提交标准,下面是一个提交的例子
Header = type: subject(feat fix style refactor)
Body = list
feat: 添加共享功用
给每篇博文添加共享功用
- 添加共享到微博
- 添加共享到微信
在 git 内部一个 commit 的信息如下
但后面咱们会进行如下的笼统
分支
git 中的分支十分轻量,便是对 commit 的一个引证,默许 git 会新建一个 master 分支,git 中有一个特别的引证讲座 HEAD,他只想当时地点的方位
有时咱们需求新建或删去分支
git branch test # 新家分支test
git branch –d test # 删去test分支,当时HEAD有必要不能指向test分支
建好分之后,就该切换到那个分支去了
git checkout test # 切换到test分支
新建并切换分支,能够兼并成一个指令,下面的指令等同于上面两条指令
git checkout –b test
在新建的分支上开发一段时间后,你或许需求将其兼并到另一个分支去,而兼并分支共有 4 中不同的办法,关于这四种办法的差异和场景请看这篇文章图解 4 种 git 兼并分支办法
远端
一张图归纳远端和本地的关系,以及相应的操作指令
其实 git 在远端是一个完好的库房,和本地其实相同,也有 HEAD,也有 master;但咱们本地为了防止抵触,都将远端的引证姓名放到了 origin 下(origin 也可是别的姓名)
Remote HEAD -> xxx/HEAD(origin/HEAD)
Remote master -> xxx/master(origin/master)
在.git 下面的 config 文件里边又对应规矩的装备信息,fetch 哪一行,设置将远端refs/heads
下的放到本地的refs/remotes/origin
下
[remote "origin"]
url = git@github.com:yanhaijing/yanhaijing.github.io.git
fetch = +refs/heads/*:refs/remotes/origin/*
对于远端最常用的操作便是更新和推送
git fetch origin # 将本地的远端和远端进行同步
git merge origin/master # 将本地的远端兼并到本地分支
git pull origin # 这相当于上面两条指令
git push origin master # 将本地推送到远程分支
关于 push 的有必要得说一下引证翻开,下面这些指令是相同的,git 内部都会主动翻开成最终一条
git push origin master
git push origin master:master
git push origin heads/master:heads/master
git push origin refs/heads/master:refs/heads/master
有时候咱们或许会检查远端的信息,比方看下远端地址啥的
git remote –v # 检查悉数远端的摘要信心
git remote show xxx # 检查具体远端的详细信息
有时候咱们也会添加或删去远端
git remote add xxx url # 廷加一个新的远端
git remote remove xxx # 删去一个远端
日志
有时咱们需求检查 git 的提交日志,能够运用git log
,log 有大量参数,感兴趣的同学能够自行探索,但常用的就下面这么几个
git log -number # 显现最近几条
git log --oneline(--abbrev-commit --pretty=oneline)# 单行显现,显现简略commit id
git log --graph # 以树形展现
git log --decorate # 显现分支名等
git log --first-parent # 显现第一父元素(不显现merge进来的树形结构)
git log --all # 显现悉数分支
除了git log
咱们还能够运用 gitk 这个工具,这是 git 2.0 今后加入的图形化工具,能够以更友爱等方法检查 log 树,常用的有两个参数
gitk –all # 显现悉数分支
gitk --first-parent # 显现第一父元素(不显现merge进来的树形结构)
下图是git log
和 gitk 的指令复杂度和显现效果
注:假如你在 mac 下运用 gitk,或许会发现显现十分模糊,这是由于 retina 屏幕的问题,能够尝试下下面的办法
首先装置 retinizer,假如你没装置 brew 或许需求装置 homebrew
$ brew cask install retinizer
然后翻开 gitk 地点的目录
$ open /System/Library/Frameworks/Tk.framework/Versions/Current/Resources/
翻开 retinizer,并将 Wish.app 拖拽到 retiniaer 的界面,然后点一下那个按钮,然后就 ok 了
下面是带不带--first-parent
的差异
有人用 git 的 commit 只做了台北的公交线路图,我表明给跪了,感兴趣猛戳这儿
diff
diff 指令常用的指令有两个
git diff file #检查指定文件的差异
git diff --stat #检查简略的diff结果
下图总结了 diff 悉数状况
常用指令总结
config
help status log
clone init
add commit
branch checkout diff
merge rebase
fetch pull push remote
总结
欢迎大家阅览本文,假如你觉得本文对你有协助,那就点赞加关注作者吧,假如对本文有任何疑问,欢迎在评论区沟通。
原创不易,求共享、求一键三连
我正在参与技术社区创作者签约计划招募活动,点击链接报名投稿。