zoukankan      html  css  js  c++  java
  • 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分支

     

  • 相关阅读:
    webrtc学习资源
    HTML5视音频标签参考
    ffmpeg 翻译文档
    音频编码器
    opensource mcu
    无法解析的外部符号 "public: static void __cdecl std::_String_base::_Xran(void)" (?_Xran@_String_base@std@@SAXXZ)"
    AAC头部格式
    C++11系列-什么是C++11
    Neo4J空间数据存储
    Neo4j 3.0 存储过程
  • 原文地址:https://www.cnblogs.com/lifexy/p/14148252.html
Copyright © 2011-2022 走看看