作者同系列博客参考链接:
Git基础入门五:分支管理
Git基础入门四:版本回退(撤销修改)
Git基础入门三:创建版本库和添加修改文件基本命令
Git基础入门二:工作区和暂存区
Git基础入门一:起源与安装
1、查看分支:git branch
列出所有分支,当前分支前面会标一个*
号。
2、创建分支:git branch <name>
3、切换分支:git checkout <name>
4、创建+切换分支:git checkout -b <name>
git checkout
命令加上-b
参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
5、合并某分支到当前分支:git merge <name>
合并时,有时候会出现Fast-forward
信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master
指向dev
的当前提交, 所以合并速度非常快。
当然,也不是每次合并都能Fast-forward
6、解决分支合并冲突:执行以上命令时,如果文件存在冲突,必须手动解决冲突后再提交。git status
也可以告诉我们冲突的文件,然后直接VI该文件。
注:Git用<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容。
需手工修改冲突文件。改完再git add和git commit提交。
如果存在未解决的冲突时,下次进入工作的时候,Git Bash窗口会有提示:
解决完冲突并add、commit之后,就立马恢复正常。
git merge –no-ff
强制禁用Fast forward
模式,Git会在merge时生成一个新的commit。可以保存你之前的分支历史,能够更好的查看 merge历史。
使用git log --graph --pretty=oneline --abbrev-commit
可以以图形的方式查看分支提交记录。比如:
git merge
则不会显示 feature,只保留单条分支记录。其显示结果和在被合并的分支里显示的结果一样,貌似只是把被合并分支的历史给合并进来。
8、Git储藏:git
stash
,把当前未commit的修改收存起来,等到需要的时候再拿出来。并且该分支会恢复到未修改前的状态,除非修改的文件未add到暂存区(未被git管理)。
git stash list显示暂存的工作区 (其中0是最近一次stash的内容)
stash@{0}: WIP on dev2: 4574b05 add merge from dev 3
stash@{1}: WIP on dev2: 4574b05 add merge from dev 3
stash@{2}: WIP on dev2: 4574b05 add merge from dev 3
git stash pop(等同于git stash apply(恢复) + git stash drop(删除)):恢复stash里的内容,并删除stash),但是pop命令也只能pop某一次的stash内容,如果stash了多次,需要pop多次。
你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令(可以把多次stash的内容都恢复):
$ git stash apply stash@{0}
问题思考:已add
但未
commit
的文件,在
checkout
到另外一个工作区时,仍然留在工作区,并且是
add
的状态。那还用
stash
干嘛?本地的修改和分支是不绑定的。
9、分支删除:
a、一般删除:git branch -d
分支名
如果被删除的分支没有被merge过,不允许被删除,否则使用强制删除命令。
b、强制删除:git branch -D
分支名
10、查看两分支直接的差别
Git diff
分支
1
分支
2
git log --oneline B ^A 可以列出B分支有而A分支没有的提交
git log --oneline A ^B 可以列出A分支有而B分支没有的提交
用git log --oneline B ^A 列出的提交中如果没有出现你需要的提交,则A分支已经合入了;如果有,就没合入。【这个好像不可以,如果使用的是cherry-pick的话,例如从B上cherry-pick一个patch到A,那么这条命令(git log --oneline B ^A )还是会把这个patch给列出来··
追答:你要切换到A上面确保B上面cherry-pick过来的提交已经在A这条分支上,而且没有冲突,changedid都是相同的。那用git log --oneline B ^A就不会被比较出来。】
git diff
显示工作目录与索引文件之间的差异git diff
–
cached
显示索引文件与git仓库之间的差异git diff HEAD
显示工作目录与git仓库之间的差异git diff HEAD^
则显示上一次提交之前工作目录与git仓库之间的差异,所以我们在git pull后,可以通过git diff HEAD^ 来查看拉下来的文件有那些具体的修改。
11、抓取分支
如果往远处push分支修改的时候遇到冲突,就需要从远程拉分支最新内容下来:git pul
l
如果git pull失败了,有类似“There is no tracking information for the current branch.”提示,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:
$ git branch --set-upstream-to=origin/dev dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
12、多人协作:
多人协作的工作模式通常是这样:
a、首先,可以试图用git push origin <branch-name>
推送自己的修改;
b、如果推送失败,则因为远程分支比你的本地更新,需要先用git pull
试图合并;
c、如果合并有冲突,则解决冲突,并在本地提交;
d、没有冲突或者解决掉冲突后,再用git push origin <branch-name>
推送就能成功!
e、如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令:
git branch --set-upstream-to=origin/<branch-name> <branch-name>
。
作者同系列博客参考链接:
Git基础入门五:分支管理
Git基础入门四:版本回退(撤销修改)
Git基础入门三:创建版本库和添加修改文件基本命令
Git基础入门二:工作区和暂存区
Git基础入门一:起源与安装