Git rebase - 我压扁没有删除提交
我有一个本地提交后,起源高手的头,并希望结合最后两个提交。因此,假设历史如下:Git rebase - 我压扁没有删除提交
* e9199ba - (HEAD -> master)
| test
* c4e3b53 - (origin/master, origin/HEAD)
| Saturn ring angle change in X and Y
,并希望进行一次提交,而不是e9199ba
和c4e3b53
。 我的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
。推动前你应该与其他人协调。 (如果没有这样的其他人,这使得协调更容易。)