git rebase -i和clean提交

时间:2014-05-20 21:35:32

标签: git merge rebase

我正在学习git,来自于前一段时间使用过CVS ......这是我遇到的情况,如果有人对如何了解这一点有任何暗示。

我为bugfix创建了一个分支(bug435)。我做了4次提交,然后推送到github(我们用于集中式存储库)。我看到PR(仍在学习PR过程),并看到它产生的差异非常混乱,审阅者必须逐行跋涉,(在这种情况下,创建一个新功能,我调整几次提交)。我希望它看起来只有一个,整个功能都是一体的。

所以我尝试了'git rebase -i HEAD~4'(有4次提交),并指定了压缩提交。这似乎工作,我的本地存储库上的'git log'被修改了。但是在远程存储库(在github上),更改历史记录并没有反映我的rebase。所以我推断我需要做一个'git push'。 'git push'给了我一个消息说,我需要一个'git pull'所以我这样做了。但是 - 这产生了合并,让我感到惊讶。

仍然对合并感到疑惑,我继续进行'git push'。我在github上检查了bug345的分支历史,看起来都很好 - 我认为这是好消息,rebase有效!我创建了一个新的PR - 但它们包含我的原始提交,合并提交和我的rebase的两个新提交。它产生了3次额外的提交:)不是我所期待的。

我在整个过程中的推理 - 我相信我可以做一个rebase,基本上将分支HEAD指针改回到我的第一个更改的位置,在一次提交中应用更改(重写历史记录),并将此分支推送到远程仓库,这只会反映出变化的变化。但我没想到的是有一个合并(一个额外的提交),远程repo分支仍然“记住”我的旧提交。

有关幕后发生的事情的任何指示或提示? :)

谢谢!

1 个答案:

答案 0 :(得分:2)

您只是在重写自己的历史记录。远程历史不同。

根据定义,git pull将获取远程更改并尝试合并。

您必须让远程存储库忘记历史记录或接受它被重写,例如使用-f(强制)选项。或者只是删除旧PR并制作一个具有适当历史记录的新PR。