3

在尝试使用 git filter-branch 时,我在这里复制了几个提交。我怎样才能解决这个问题?

4

1 回答 1

3

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

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

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

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

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

于 2013-06-20T01:28:49.153 回答