我把项目的本地分支搞砸了,我想把本地副本恢复到远程状态。我如何实现这个简单的目标?
如果您不怕丢失任何本地历史记录,您可以切换到另一个分支,然后删除您的本地分支,然后检查远程版本。例如,如果你想恢复一个名为"test_feature"的分支,你可以这样做:
$ git checkout master
$ git branch -D test_feature # see note about -D below
$ git checkout test_feature # should track origin/test_feature
注意:-D将强制删除分支,并将取消有关未合并更改的警告。
如果您已经合并了一个不打算合并的分支,这将非常有用,因为HEAD指针可能会根据合并的类型而更改。
EDIT:做同样事情的另一种方法是简单地键入:
git reset --hard origin/test_feature
这将把您当前所在的分支重置为远程(本例中为原点)分支test_feature
的状态。
@hvgotcodes在他的例子中有一个变体(他针对的是HEAD提交)
您可以使用重置
git reset --hard HEAD
如果你这样做,你将失去所有更改。这可能会有所帮助。
如果您想恢复到远程最后版本:
git fetch --all
git reset --hard origin/master
如果您想恢复到特定的版本:
首先,获取标识某个日期提交的字符串,执行:
git rev-list -n 1 --before="2009-07-27 13:37" origin/master
它打印提交标识符,获取字符串(例如XXXX)并执行:
git checkout XXXX
有一些简单的一句话可以满足您的要求,但通常当我觉得自己"搞砸了一个分支"而不是远程操作时,我会使用交互式重定基线,这会让我有更多的控制权。这样,如果需要的话,我可以编辑提交,或者如果我不想提交,就可以删除行。请参见此处:http://book.git-scm.com/4_interactive_rebasing.html