在尝试使用 git filter-branch 时,我重复了几个提交 here .我该如何解决这个问题?
最佳答案
警告:
以下命令将丢失 d4f81a8
之后的所有提交以及任何未提交的本地更改。
git reset --hard d4f81a8fff53cbbaabfdf6980fa68bf44e8d77f5
git push --force origin
问题是 git filter-branch
创建了一个完全独立的提交链。当你试图推送到服务器时,git 拒绝了,因为新的头部不是服务器头部的后代。推送会丢失指向旧头部的链中的提交,这通常是您要避免的事情。然而在这种情况下,新链是旧链的副本,因此没有内容丢失。
第一个命令,git reset
,通过将 master 分支的头部设置为新链中的最后一次提交来撤消 merge 。 merge 是不合适的,因为链已经具有相同的内容,使旧链变得多余。 --hard
选项还将索引和工作目录重置为该提交。
git push
的 --force
选项告诉 git 忽略新头不是旧头的后代这一事实。同样,这非常危险,因为它会丢失旧链中的提交。要检查服务器上没有新内容,您可以使用 git fetch
,它将提交从服务器下载到 ref FETCH_HEAD
但与 git pull
它不会自动 merge 。这样你就可以将你的提交与服务器上的最新提交进行比较,并仔细检查没有遗漏任何内容。
关于git - 我怎样才能取消重复我的提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17203609/