1.问题原因

         大家提交代码不规范,每开发一个新功能开了一个feature分支,但是在该feature分支上提交了很多的commit,会导致合并回dev分支的时候,将这所有的commit都合并回了dev分支。假如合并回来的分支有bug,你想回退到合并前,此时你要去找那个合并之前的版本号就异常的艰难,因为合并过来的提交记录实在是太多了。所以为了解决这个办法,有没有能让我们合并一次feature分支,就只有一个commit呢?

2.解决办法

a.使用git merge --squash解决(切记会改变 commit 的 author,谁合并就是谁的commit)

         参考网址: https://www.jianshu.com/p/684a8ae9dcf1

         使用效果: 不改变feature分支上的commit,只是在feature合并到dev的时候,dev上多了一个commit包含了feature中的所有修改。缺点是改变了 commit 的 author

b.使用git rebase -i 合并多次commit(切记不可用于协同开发的分支,只能用于独自使用的分支)

         参考网址: https://juejin.cn/post/6844903600976576519

         注意: 第一步git rebase -i HEAD~3(合并最近三个提交,如果是指定的则使用前后的commit值),第二步:将后面的pick改为s,意思是把后面的提交都保存为最后一次的提交,修改多个commit信息的时候。我们需要在git窗口上按一下i进入编辑。编辑完了再按esc, :wq退出来就行了。最后一步:修改信息,把需要合并的都删除掉,留下这次合并的commit

         提示: 这里的git rebase -i HEAD~3 可以更换成 git rebase -i origin/dev,指的是本来是合并最后3个提交记录的,更改为合并以dev为基准新增的commit。

         使用效果: 改变了feature分支上的commit。比如你在开发的时候,提交了10个commit,然后你使用了 git rebase将这10个commit合并为一个。那么合并完成之后你再去看提交历史,会发现只有一个了。此时合并回到dev也只有这一个提交。

         使用注意事项: 为了便于他人阅读你的提交,也便于cherry-pick或撤销代码变化,在发起Pull Request之前,应该把多个commit合并成一个。(前提是,该分支只有你一个人开发,且没有跟dev合并过。)

3.git工作流(补充,可不看)

         参考网址:http://www.ruanyifeng.com/blog/2015/12/git-workflow.html

         参考网址: https://www.ruanyifeng.com/blog/2015/08/git-use-process.html

4.merge的三种方式对比(补充,可不看)

         git merge , git merge --squash , git rebase i+ merge

         参考网址:https://blog.csdn.net/lhjuejiang/article/details/111594379

5.总结

         1.最好是使用 git rebase i+ git merge来合并提交历史。但是最好是该分支只有你一个人开发,因为你合并commit之后,需要强制push到远程仓库上,如果是多人开发的话,很有可能会覆盖别人的代码。

         2.如果不在意会改变改变了 commit 的 author的话,使用git merge --squash会更加的方便,且不会更改那feature分支的commit。(如果是组员开发,组长使用该命令合并,那么就是组长的commit。如果是组员开发,组员自己合并,那么就不会改变commit)

         二选一,视情况而定

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐