Git rebase - 我压扁没有删除提交

问题描述:

我有一个本地提交后,起源高手的头,并希望结合最后两个提交。因此,假设历史如下:Git rebase - 我压扁没有删除提交

* e9199ba - (HEAD -> master) 
|   test 
* c4e3b53 - (origin/master, origin/HEAD) 
|   Saturn ring angle change in X and Y 

,并希望进行一次提交,而不是e9199bac4e3b53。 我的git git rebase -i HEAD~2而被压扁第二承诺:

pick c4e3b53 Saturn ring angle change in X and Y 
squash e9199ba test 

结果我有两个独立提交 - 新压扁一个老主人的一个:

* 216b314 - (HEAD -> master) 
|   Suqashed commits 
| * c4e3b53 - (origin/master, origin/HEAD) 
|/   Saturn ring angle change in X and Y 

有什么不对吗?这是出于原始主人的头?在这种情况下如何组合它们?或者也许有一些历史显示问题?

正如你说:

...我有两个独立提交 - 新压扁一个老主人的一个

这是你应该期待什么,因为git rebase作品通过复制提交(也许有一些修改,例如压扁),然后让你的Git将自己的分支名称指向新副本。

origin/master不是你自己的,重新启动的分支。这是你的远程跟踪分支,它记得一些其他 Git有其他 Git的master。因此,您的origin/master会继续记住其他Git所拥有的内容,这是在您稍做修改之前的原始提交。

那个其他的Git仓库本身 - 你叫origin的那个 - 还有其他的提交。由于origin有它,所以从origin复制的任何人也拥有它。您必须说服origin以及任何从origin复制的人切换到您的闪亮新提交。

如果你对origin有控制权,你可能会用闪亮的新提交来使用“强制推送”来覆盖它现在在master中的任何内容。 (origin存储库仍然会有旧的提交,虽然可能非常简要,直到它执行“垃圾回收”过程。)然后,您还必须说服origin的所有用户也切换,就像您一样,只是像你迫使origin去做。正是如何你可以并且将会这样做取决于你。

请注意,如果其他人也被推向origin,它可能是你的力量推动要擦去承诺他们有加,依赖于c4e3b53。推动前你应该与其他人协调。 (如果没有这样的其他人,这使得协调更容易。)