日常工作中,个人总结的 - Git - 常用操作方法 (六)

536 阅读3分钟

工作中,刚开始我对 merge 和 merge --no-ff 这2个指令的区别有所不解,下图很好展示了这2个指令的不同(如果你平时用可视化工具管理代码可略过)

此图来自CSDN

此图片来自https://blog.csdn.net/u010940300/article/details/47419069

  • git add .
  • git commit -m [很大] ------ 比如当前我在自己的 dragon 分支,commit 一些东西
  • ……省略
  • git pull ----- 比如我现在在 dev 分支,pull 完最新的代码
  • ……省略
  • git rebase dev ---- 比如我切换到 dragon 分支,把最新一版的dev代码rebase到现在的分支
  • git checkout dev ----- 切换到dev分支
  • git merge --no-ff dragon ----- 把dragon分支mergedev上。为什么merge要加 --no-ff 呢? --no -ff 可以保存你之前的分支历史,保留分支的commit历史以及生成一个回顾提交历史,能够更好的查看merge历史,以及branch 状态。git merge 则不会显示dragon分支所commit的历史内容不方便查看,只保留单条分支记录,如果不加 --no-ff 则被合并的分支(dragon)之前的commit都会被抹去

merge和rebase 这2个操作都是合并的意思,他们的区别下面只是代表本人浅意识的理解

合并的时候,有可能会产生代码重叠。重叠的产生是因为在多人开发模式下在合并代码的时候,不同开发人员的不同分支修改了相同的位置。所以在合并的时候git不知道那个到底是你想保留的,所以就提出疑问(重叠提醒)让你自己手动选择想要保留的内容,从而解决重叠。

-git rebase 命令合并分支,如果有重叠且解决完重叠,执行git add .git rebase --continue,不会产生额外的commit。这样的好处是,‘干净’,分支上不会有无意义的解决分支的commit。 rebase 遇见重叠后会暂停当前操作,操作人可以选择手动解决重叠,然后 git rebase --continue 继续,或者 --abort 直接停止该次 rebase 操作(--abort 我是暂时没用过)

-git merge 命令合并分支,如果有重叠并且解决完重叠,执行git add .git commit -m [fix],这个时候会产生一个commit。merge遇见重叠后会直接停止,等待手动解决重叠并重新提交 commit 后,才能再次 merge,merge命令不会保留被merge的分支(比如上面的dragon)的commit。

总结

此总结的灵感

  • 当分支有修改未 commit 时,不能进行 rebase 操作,可以考虑先用 git stash 命令暂存
  • rebase 并没有进行合并操作,只是提取了当前分支的修改,将其复制在了目标分支的最新提交后面
  • rebase 的提交历史反映了项目过程中发生了什么,关注点在开发过程上面
  • merge 是一个合并操作,会将两个分支的修改合并在一起,默认操作的情况下会提交合并中修改的内容
  • merge 的提交历史忠实地记录了实际发生过什么,关注点在真实的提交历史上面

结语

前端react QQ群:788023830 ---- React/Redux - 地下老英雄

前端交流QQ群:249620372 ---- FRONT-END-JS前端

(我们的宗旨是,为了加班,为了秃顶……,仰望大佬),希望小伙伴们加群一起学习