Git-rebase-i压扁没有';不要删除提交
我在origin master的头之后有一个本地提交,并希望合并最后两个提交。因此,假设历史如下:Git-rebase-i压扁没有';不要删除提交,git,github,commit,rebase,squash,Git,Github,Commit,Rebase,Squash,我在origin master的头之后有一个本地提交,并希望合并最后两个提交。因此,假设历史如下: * e9199ba - (HEAD -> master) | test * c4e3b53 - (origin/master, origin/HEAD) | Saturn ring angle change in X and Y 并希望进行一次提交,而不是e9199ba和c4e3b53。 我做了gitgit-rebase-I HEAD~2并压扁了第二
* e9199ba - (HEAD -> master)
| test
* c4e3b53 - (origin/master, origin/HEAD)
| Saturn ring angle change in X and Y
并希望进行一次提交,而不是e9199ba
和c4e3b53
。
我做了gitgit-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的主文件中的内容。因此,您的origin/master
会继续记住另一个Git所拥有的内容,这是在您创建稍微修改的副本之前的原始提交
另一个Git存储库本身(您称之为origin
)具有另一个提交。既然origin
拥有它,任何从origin
复制的人都拥有它。您必须说服origin
,以及从origin
复制的任何人切换到您的新提交
如果您可以控制origin
,则可以使用“强制推送”来覆盖其master
中的所有内容,并使用新提交。(origin
存储库也将保留旧的提交,尽管可能非常短暂,直到它完成“垃圾收集”过程。)然后您还必须说服origin
的所有用户也切换,就像您所做的和您强制origin
所做的一样。具体如何做到这一点取决于你自己
请注意,如果其他人也在推送至原点
,则您的强制推送可能会删除他们添加的提交,这取决于c4e3b53
。在强行推进之前,你应该与其他人协调。(如果没有这样的人,协调起来就容易多了。)正如你所说:
。。。我有两个独立的提交-新的压扁一个和老主人的一个
这正是您应该期望的,因为git-rebase
通过复制提交(可能需要进行一些修改,例如挤压)来工作,然后让您的git将您自己的分支名称指向新的副本
但是origin/master
不是您自己的、重定基础的分支。这是您的远程跟踪分支,它可以记住其他Git在另一Git的主文件中的内容。因此,您的origin/master
会继续记住另一个Git所拥有的内容,这是在您创建稍微修改的副本之前的原始提交
另一个Git存储库本身(您称之为origin
)具有另一个提交。既然origin
拥有它,任何从origin
复制的人都拥有它。您必须说服origin
,以及从origin
复制的任何人切换到您的新提交
如果您可以控制origin
,则可以使用“强制推送”来覆盖其master
中的所有内容,并使用新提交。(origin
存储库也将保留旧的提交,尽管可能非常短暂,直到它完成“垃圾收集”过程。)然后您还必须说服origin
的所有用户也切换,就像您所做的和您强制origin
所做的一样。具体如何做到这一点取决于你自己
请注意,如果其他人也在推送至原点
,则您的强制推送可能会删除他们添加的提交,这取决于c4e3b53
。在强行推进之前,你应该与其他人协调。(如果没有这样的人,协调起来就容易多了。)