我如何复制我的提交?

时间:2013-06-20 00:43:10

标签: git github

在尝试使用git filter-branch时,我复制了几个提交here。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

警告:
以下命令将丢失所有超过d4f81a8的提交以及任何未提交的本地更改。

git reset --hard d4f81a8fff53cbbaabfdf6980fa68bf44e8d77f5
git push --force origin

问题是git filter-branch创建了一个完全独立的提交链。当你试图推送到服务器git拒绝,因为新的头不是服务器头的后代。推送将丢失通向旧头的链中的提交,这通常是您想要避免的。但是在这种情况下,新链是旧链的副本,因此不会丢失任何内容。

第一个命令git reset通过将主分支的头部设置为新链中的最后一个提交来撤消合并。合并是不合适的,因为链已经具有相同的内容,使旧链变得多余。 --hard选项还会将索引和工作目录重置为该提交。

--force的{​​{1}}选项告诉git忽略新头不是旧头的后代的事实。同样,这非常危险,因为它会丢失旧链中的提交。要检查服务器上是否有新内容,您可以使用git push,它会将提交从服务器下载到ref git fetch,但与FETCH_HEAD不同,它不会自动合并。这样你可以将你的提交与服务器上的最新提交进行比较,并仔细检查没有遗漏任何内容。