github-分支合并、解决冲突、分支现场管理

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分支

 

posted @ 2020-12-17 10:34  诺谦  阅读(1410)  评论(0编辑  收藏  举报