强烈推荐的做法是不要更改其他人将已拉取的其他地方的提交的历史记录。尽管如此,不理解这一点的人无论如何都会不可避免地这样做。从“其他用户”的角度来看,而不是从改变历史的人的角度来看,最好的恢复方式是什么?
这是一个使其具体的示例。
Ryan 创建了一些提交和推送:
ryan $ git init
ryan $ echo "initial stuff" > file.txt
ryan $ git add file.txt
ryan $ git commit -m "Initial commit"
ryan $ echo "more stuff" >> file.txt
ryan $ git add file.txt
ryan $ git commit -m "More stuff"
ryan $ git remote add origin [some url]
ryan $ git push origin
Joe 克隆了 github 存储库
joe $ git clone [some url]
至此,一切都好,那么……
Ryan 更改了最后一次提交:
ryan $ vi file.txt
ryan $ git add file.txt
ryan $ git commit --amend -m "More stuff"
ryan $ git push origin
[Fails]
ryan $ git push -f origin master
请注意,Ryan 在失败后进行了强制推送。如果他是唯一一个从原点撤离的人,这很好,但在这种情况下,他只是把乔搞砸了。
乔试图拉:
joe $ git pull origin
[Conflict!]
现在这是一个非常简单的示例,但 Joe 可能不熟悉file.txt
并且会发现很难合并更改。
再一次,我明白问题的根源是瑞恩做了坏事。但尽管如此,我正在寻找 Joe 和他的队友无需进行合并提交即可从中恢复的方法。
我知道一个技巧是删除远程分支的本地副本,然后从源重新检查它。但当然,这只有在您没有任何更改的情况下才有效。乔很可能做出了一些他自己想要做出的新改变。
想法?