我有一个本地提交的原始主人的头,并想要结合最后两个提交。所以假设历史如下:
* 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
这里有什么问题?这是由于原始主人的头部原因吗?在这种情况下如何组合它们?或者也许有一些历史显示问题?
答案 0 :(得分:2)
就像你说的那样:
......我有两个独立的提交 - 新的压缩的一个和老主人的一个
这是你应该期待的,因为git rebase
通过复制提交工作(可能会进行一些修改,比如挤压),然后让你的Git指向你自己的分支名称到新的副本。
但是origin/master
不是你自己的,重新定位的分支。它是您的远程跟踪分支,它会记住其他 Git master
中其他 Git的内容。因此,您的origin/master
会继续记住其他Git所拥有的内容,这是您在进行略微修改后的副本之前的原始提交。
其他Git存储库本身 - 您调用的origin
- 具有另一个提交。由于origin
拥有它,因此从origin
复制的任何人都拥有它。您必须说服origin
以及从origin
复制的任何人切换到您闪亮的新提交内容。
如果您可以控制origin
,则可以使用“强制推送”来覆盖其master
中现有的任何内容,并使用闪亮的新提交。 (origin
存储库仍将具有旧提交,但可能非常短暂,直到它执行“垃圾收集”传递。)然后,您还必须说服 {{1}的所有用户也可以像你一样切换,就像你强迫origin
一样。完全如何你可以做什么取决于你。
请注意,如果其他人也推送到origin
,您的强制推送可能会删除他们添加的提交,这取决于origin
。你应该在强迫推进之前与其他人协调。 (如果没有这样的其他人,这使得协调变得更加容易。)