前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >github-分支合并、解决冲突、分支现场管理

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

作者头像
诺谦
发布2020-12-21 14:24:58
1.3K0
发布2020-12-21 14:24:58
举报
文章被收录于专栏:Linux驱动Linux驱动

1.分支合并

1.1 常用命令

代码语言:javascript
复制
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 要用到的相关命令

代码语言:javascript
复制
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分支

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-12-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
项目管理
CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档