Git rebase - 我压扁没有删除提交
Git rebase - i squashing didn't remove commit
我在 origin master 的 head 之后有一个本地提交,想合并最后两个提交。那么假设历史是这样的:
* 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
这是怎么回事?难道是源主脑袋的原因?在这种情况下如何组合它们?或者可能有一些历史显示问题?
正如你所说:
... I've got two independent commits - the new squashed one and old master's one
这是您应该期待的,因为 git rebase
通过 复制 提交(可能在此过程中进行一些修改,例如压缩),然后让您的 Git 将自己的分支名称指向新副本。
但是 origin/master
不是你自己的,rebased,分支。这是您的 remote-tracking 分支,它会记住某些 other Git 在 other[=46 中的内容=] Git 的 master
。因此,您的 origin/master
会继续记住其他 Git 拥有的内容,即在您制作略微修改的副本之前的原始提交。
另一个 Git 存储库本身——你称之为 origin
的存储库——有另一个提交。因为 origin
有它,任何从 origin
复制的人也有它。您必须说服 origin
以及从 origin
复制的任何人切换到您闪亮的新提交。
如果您可以控制 origin
,您可能会使用 "force push" 用闪亮的新提交覆盖它现在在 master
中的任何内容。 (origin
存储库仍然会有旧的提交,尽管可能非常短暂,直到它通过 "garbage collection"。)然后你还必须说服 all 用户origin
也要切换,就像您所做的那样,就像您强迫 origin
那样做一样。具体如何您可以并且愿意这样做取决于您。
请注意,如果其他人也正在推送 origin
,您的强制推送可能会擦除 他们 添加的提交,这取决于 c4e3b53
。在强制推动之前,您应该与这些其他人协调。 (如果没有这样的其他人,协调起来会容易很多。)
我在 origin master 的 head 之后有一个本地提交,想合并最后两个提交。那么假设历史是这样的:
* 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
这是怎么回事?难道是源主脑袋的原因?在这种情况下如何组合它们?或者可能有一些历史显示问题?
正如你所说:
... I've got two independent commits - the new squashed one and old master's one
这是您应该期待的,因为 git rebase
通过 复制 提交(可能在此过程中进行一些修改,例如压缩),然后让您的 Git 将自己的分支名称指向新副本。
但是 origin/master
不是你自己的,rebased,分支。这是您的 remote-tracking 分支,它会记住某些 other Git 在 other[=46 中的内容=] Git 的 master
。因此,您的 origin/master
会继续记住其他 Git 拥有的内容,即在您制作略微修改的副本之前的原始提交。
另一个 Git 存储库本身——你称之为 origin
的存储库——有另一个提交。因为 origin
有它,任何从 origin
复制的人也有它。您必须说服 origin
以及从 origin
复制的任何人切换到您闪亮的新提交。
如果您可以控制 origin
,您可能会使用 "force push" 用闪亮的新提交覆盖它现在在 master
中的任何内容。 (origin
存储库仍然会有旧的提交,尽管可能非常短暂,直到它通过 "garbage collection"。)然后你还必须说服 all 用户origin
也要切换,就像您所做的那样,就像您强迫 origin
那样做一样。具体如何您可以并且愿意这样做取决于您。
请注意,如果其他人也正在推送 origin
,您的强制推送可能会擦除 他们 添加的提交,这取决于 c4e3b53
。在强制推动之前,您应该与这些其他人协调。 (如果没有这样的其他人,协调起来会容易很多。)