git-rebase-i和clean提交

git-rebase-i和clean提交,git,merge,rebase,Git,Merge,Rebase,我正在学习git,因为我之前使用过CVS。。。这是我遇到的一个情况,如果有人对如何了解这一点有任何提示的话 我为错误修复创建了一个分支(bug435)。我做了4次提交,然后推送到github(我们将其用于集中存储库)。我看到了PR(仍在学习PR过程),并且看到它生成的差异非常混乱,审查者必须逐行遍历(在本例中,创建一个新函数,我在几个提交中对其进行了调整)。我更希望它看起来像一个加法器,将整个功能集成在一块中 所以我尝试了'git rebase-I HEAD~4'(共有4次提交),并指定了要挤压

我正在学习git,因为我之前使用过CVS。。。这是我遇到的一个情况,如果有人对如何了解这一点有任何提示的话

我为错误修复创建了一个分支(bug435)。我做了4次提交,然后推送到github(我们将其用于集中存储库)。我看到了PR(仍在学习PR过程),并且看到它生成的差异非常混乱,审查者必须逐行遍历(在本例中,创建一个新函数,我在几个提交中对其进行了调整)。我更希望它看起来像一个加法器,将整个功能集成在一块中

所以我尝试了'git rebase-I HEAD~4'(共有4次提交),并指定了要挤压的提交。这似乎是可行的,我的本地存储库上的“git日志”也被修改了。但在远程存储库(github本身)上,更改历史记录并没有反映我的rebase。所以我推断我需要做一个“git push”git push给了我一个信息,说我需要一个git pull,所以我做了这个。但是--这产生了一个合并,这让我很惊讶

仍然对合并感到疑惑,我继续进行“git推送”。我在github上查看了bug345的分支历史记录,所有这些看起来都很不错——我认为这是个好消息,重基成功了!我创建了一个新的PR——但它们包含了我的原始提交、一个合并提交和来自我的rebase的两个新提交。它生成了3个额外的提交:)不是我所期望的

在整个过程中,我的推理是——我相信我可以做一个重基,基本上将分支头指针更改回我的第一个更改所在的位置,在一次提交(重写历史)中应用更改,并将此分支推送到远程回购,这将只反映重基更改。但我没有预料到的是,有一个合并(一个额外的提交),远程回购分支仍然“记住”我以前的提交

关于场景下发生的事情有什么提示吗?:)


谢谢大家!

你只是在改写自己的历史。遥远的历史是不同的

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

您必须让远程存储库忘记历史记录,或者也接受正在重写的历史记录,例如使用-f(force)选项。或者简单地删除旧的PR并创建一个具有正确历史记录的新PR