美文网首页
git合并冲突与回滚

git合并冲突与回滚

作者: 叫我C30混凝土 | 来源:发表于2020-03-22 01:18 被阅读0次

    注:https://github.com/nvbn/thefuck
    修正命令行小工具

    git checkout 版本号 --回滚至该版本,并需要创建一个新的分支


    checkout_idea.jpg

    与reset --hard的区别

     1.reset会把working directory里的所有内容都更新掉
     2.checkout不会去修改你在Working Directory里修改过的文件
     3.reset把branch移动到HEAD指向的地方
     4.checkout则把HEAD移动到另一个分支
    
    区别.jpg

    建议:
    reset会修改版本历史的,因为他会丢弃掉一些版本历史。所以不建议使用

    合并分支:

    merge直接将两个状态合并,并产生一个新的合并提交

    优点:

    • 简单易于理解
    • 记录了完整的历史过程
    • 冲突解决简单
      缺点:
    • 历史杂乱
    • 对bisect不友好(bisect二分查找)
      使用:
      分支A的新代码,合并到master中
      1.git checkout master
      2.git merge(若有同一行的冲突,手动解决冲突,省略add命令)
      3.git commit
      4.git push
      过程如下图:


      merge.png

    rebase:将某个状态的commit的挨个重演

    优点:

    • 分支历史是一条线;
    • 对bisect友好
      缺点:
    • 使用复杂;
    • 如果存在冲突,可能要重复解决(如文件A,commit了N次)或squash(问题,压缩commit会丢失历史版本)
      场景:定期和主干同步
      使用:
      分支A的新代码,合并到master中
      1.git checkout A
      2.git rebase master(若有同一行的冲突,手动解决冲突,省略add和continue命令)
      3.git commit
      4.git push -f (切记:只能在不和他人合作的分支使用)
      过程如下图


      rebase.png

    git merge --squash

    将分支A的commit合并提交到master
    优点:

    • 把所有变更合在一起,可读性强,bisect友好
    • 回滚和revert方便
      缺点:
    • 丢失了所有的历史记录
      使用:
      分支A的新代码,合并到master中
      1.git checkout master
      2.git merge 分支A --squash (解决冲突)
      3.git commit
      4.git push


      squash.png

    结论

    1.在自己独占的分支上尽量使用rebase
    2.和其他人公用的分支不要用push -f

    相关文章

      网友评论

          本文标题:git合并冲突与回滚

          本文链接:https://www.haomeiwen.com/subject/tqopyhtx.html