美文网首页
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