git rebase(如果没有冲突),否则git merge

时间:2018-01-15 22:29:22

标签: git merge rebase

当我的分支与master没有冲突时,我更喜欢做git rebase,因为它保留了简单的历史记录。

但是当存在冲突时,有时rebase会让我解决每个远程提交的冲突,这是更多的工作。另外,我认为如果存在冲突,那么冲突解决引入新bug的可能性就更高,所以在这种情况下我宁愿做一个merge,而是清楚记录我开始编码的地方,是什么我做了,以及我如何解决冲突。

所以我一直这样做:

git fetch -> git rebase 

而且,如果有任何冲突:

git rebase --abort
git merge

我发现自己每天都会这样做几次。有没有内置的方法来实现这一目标?或者我应该创建git别名?

1 个答案:

答案 0 :(得分:2)

我更喜欢手动检查传入的提交,然后决定rebase-vs-merge,但实际上你可以使用git rebase将以零退出的事实自动执行此操作(成功)状态,如果它完成rebase,如果不成功,则为非零(失败)状态。因此,您可以编写一个小的shell脚本或适合用作shell别名的单行命令:

git fetch && { git rebase || { git rebase --abort && git merge; } }

表示运行git fetch,如果成功,则运行支持的一系列命令:

  • git rebase,如果成功,别的什么都没有;或

    • git rebase --abort,如果成功,git merge

(实际上并不需要内括号,因为&&||更紧密地结合,至少在sh和bash中。它们更多是为了清晰意图。)