Git 变基 - 将共享远程变基到本地,避免合并提交?

Git Rebase - Rebase Shared Remote Onto Local, Avoid Merge Commit?

我有点难以理解(克服?)Git Rebase 中的恐惧,因为它与共享分支有关,但本地提交尚未推送。

假设我有一个本地分支 my-feature,它比跟踪的远程 origin/my-feature 提前 2 次提交。此分支也由其他开发人员共享和工作。

我很确定如果我拉,我会发生冲突,并且可能会以非常讨厌的合并提交结束,我想避免这种情况。我的想法是,如果我可以在我的本地分支之上重新设置远程分支的基础(并且只为我的 2 个新提交重写提交历史),我就可以在本地修复合并冲突并避免讨厌的合并提交。但是,我不确定 rebase 在这种情况下是否是这样工作的。

一般建议似乎是 "avoid rebasing shared branches",但有人可以告诉我这在我的场景中会如何发挥作用吗?有没有更好的方法来完成我想做的事情?

不要将远程分支变基到本地分支 - 这会修改远程分支的历史记录(并且无论如何都需要本地分支来跟踪该变基)。相反,将您的本地 my-feature 重新设置为 origin/my-feature:

git checkout my-feature

# git add and git commit lots of stuff

git fetch origin
git rebase origin/my-feature

自上次获取 origin/my-feature 以来您添加到 my-feature 的任何提交都将应用在 origin/my-feature 的最新顶部之上。这样,您就不会重写 origin/my-feature 的历史记录。也就是说,从其他用户的角度来看,您只是向其添加提交。

这只是我给很多人的一般提示 - 从您的字典中删除 pull。只是忘记这个概念甚至存在。首先执行 fetch,然后使用 gitk --all 或等效项查看所有分支,并决定您希望如何进行(合并、变基等)。