在尝试使用git filter-branch时,我复制了几个提交here。我该如何解决这个问题?
答案 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
不同,它不会自动合并。这样你可以将你的提交与服务器上的最新提交进行比较,并仔细检查没有遗漏任何内容。