1.分支合并
1.1 常用命令
git branch //查看分支 git branch test //创建一个名为test的分支 git checkout test //从当前分支切换到test分支 git checkout –b test //创建并切换到test分支 git merge test //合并test到当前分支 git branch –D test //强制删除test分支
1.2 分支合并示例
假如,我们test分支主要工作是创建2.txt,并上传2.txt.
如下图所示,可以看到,我们已经切换到了test分支:
然后创建一个2.txt,并git add 2.txt:
然后git commit 2.txt -m "提交2.txt":
此时我们提交的只是在test分支,在master主分支上,其实并没有,所以我们还需要将test分支合并到master主分支上.
然后git checkout master,切换分支:
如上图所示,由于2.txt是test分支的,所以当切换到master分支后,就会消失.
然后输入git merge test,将test合并到分支:
如下图所示,此时就可以看到2.txt已经有了,输入”git log”,也可以看到2.txt是test分支上传的:
然后将上面的commit值复制下来,输入git show 8e26b96895a75d971a066da8a822fb7bce1bd874,就可以看到具体提交的内容了.
由于test分支的工作目的已经完成了,所以就可以通过git branch –d test来删除test分支了.
2.分支合并之冲突
之前我们test工作是完成了2.txt创建以及上传工作,如下图所示:
假如,我们现在共同对已有的2.txt进行修改,那么分支合并的时候,必然会造成冲突.所以我们需要解决冲突.
首先git checkout -b test1,进入test1分支,然后修改2.txt,然后再进行add、commit提交:
然后再次git checkout master,进入主分支,可以看到2.txt已经还原为0kb(没有内容):
然后我们此时,在master主分支上修改2.txt,用来模拟其它同事提交:
进行add,commit提交:
接下来我们便开始合并,进行git merge test1,就会发现2.txt合并冲突:
此时再次打开2.txt,可以看到主分支和test1分支分别加了什么:
也可以右击TortoiseGit(小乌龟),来解决冲突:
最后内容改为:
然后再次add、commit,就解决冲突了,如下图所示,可以看到当前状态MERGING已经消失了,说明合并成功了:
3.分支管理工作现场
大部分项目管理中,master主分支都是用来发布版本,存的代码都是很稳定的.
而子分支主要是用来开发人员干活的,比如添加功能、升级功能等.完成后就会提交合并到主分支上.
场景1:
假如,当前正在实现的A功能,但是还未提交,但是发布版本的代码中,出现了一个bug,需要临时修复,但是此时的A功能还未写完,所以就需要保存A功能所在的代码现场才行.等修复bug完成后,再恢复A功能工作现场,继续实现A功能.
场景2:
假如,当前正在实现的A功能周期长,但是在此期间,其他开发人员已经更新了很多功能并合并到主分支上了,此时我们A功能才完成,所以需要保存A功能所在的代码现场,然后从主分支同步代码下来,最后再恢复A功能工作现场,然后提交代码,并检查合并代码冲突.
3.1 要用到的相关命令
git stash //存储当前工作现场 git stash list //查看git stash列表 git stash apply stash@{X} //从git stash列表中恢复指定的存储列, 比如git stash apply stash@{1},把版本号为stash@{1}的备份取出(而0对应最新版本),不会删除对应的stash git stash drop stash@{X} //从git stash列表中删除某列,比如git stash drop stash@{1} git stash pop //恢复最近一次stash存储的列内容, 获取之后会删除栈中对应的stash。 git merge master //从master合并代码到本分支上. git branch –D test1 //删除test1分支,并会丢弃test1上的未合并过的代码,比如A功能不需要实现了.
3.2 模拟场景1(funA分支:实现A功能哪个、bug分支:用来解决bug问题)
首先通过"git checkout -b funcA"进入funcA分支, 向2.txt添加"实现功能A"字段来模拟实现功能A,:
此时发现了之前写的2.txt有一个bug,首先输入git stash,保存功能A当前现场:
如上图所示,git stash后,再次git status,可以看到2.txt已经复原了,而修改的内容则保存在了stash表中.
然后切换到bug分支, 向2.txt添加"解决bug问题"字段来模拟解决bug场景,然后提交文件:
然后切换到master,通过git merge bug来合并刚刚解决的bug问题,然后通过git log,查看刚刚合并的版本号:
也可以通过git log --oneline查看精简版log:
解决完bug后进入funcA分支,并删除bug分支:
然后输入git merge master,将刚刚修改的bug代码合并到当前分支里:
最后输入git stash pop,把功能A工作现场恢复到2.txt,由于2.txt之前解决过bug,所以还要解决合并冲突.
也可以通过右击TortoiseGit(小乌龟),来解决冲突:
修改如下:
然后再次输入以下命令进行文件提交和同步,即可完成:
$ git add 2.txt
$ git commit -m "合并master后,并升级功能A"
$ git checkout master //切换到master
$ git merge funcA //然后合并funcA分支到master中
$ git branch -D funcA //功能A完成,删除funcA分支