一种高度推荐的做法是不要更改已经被别人拉取过的提交记录。尽管如此,仍会有人不理解这一点而进行更改。从“其他用户”的角度来看,而非更改历史记录的人自己,最好的恢复方式是什么?
以下是一个具体的例子:
Ryan创建了几个提交并推送:
请注意,如果Ryan是唯一从源代码库拉取代码的人,则在失败后进行强制推送是可以接受的。但在这种情况下,他已经把Joe搞砸了。
Joe尝试拉取:
现在这只是一个非常简单的例子,但Joe很可能不熟悉file.txt文件,并且会发现合并更改很困难。
我知道问题的根源在于Ryan做了错事,但无论如何,我正在寻找Joe和他的队友能够恢复而不必进行合并提交的方法。
我知道一种技巧,就是删除本地复制的远程分支,然后从原点重新检查它。但当然,这仅适用于您没有进行任何更改的情况。很可能Joe已经做了一些自己的新更改,他想要提交。
你有什么想法?
以下是一个具体的例子:
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搞砸了。
Joe尝试拉取:
joe $ git pull origin
[Conflict!]
现在这只是一个非常简单的例子,但Joe很可能不熟悉file.txt文件,并且会发现合并更改很困难。
我知道问题的根源在于Ryan做了错事,但无论如何,我正在寻找Joe和他的队友能够恢复而不必进行合并提交的方法。
我知道一种技巧,就是删除本地复制的远程分支,然后从原点重新检查它。但当然,这仅适用于您没有进行任何更改的情况。很可能Joe已经做了一些自己的新更改,他想要提交。
你有什么想法?