Git:如何将我的本地分支还原到远程分支的状态?

15

我搞乱了本地一个项目的分支,现在我想将本地副本还原到远程状态。如何简单地实现这个目标?


可能是重复问题:将本地仓库分支重置为与远程仓库HEAD完全一致 - Michael Freidgeim
4个回答

24
如果你不怕丢失任何本地历史记录,你可以切换到另一个分支,然后删除你的本地分支,然后检出远程版本。例如,如果你想回滚一个名为"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指针可能会根据合并类型而改变。
编辑:执行相同操作的另一种方法是简单地输入:
git reset --hard origin/test_feature

这将重置您当前所在的分支为远程(在本例中为origin)分支test_feature的状态。

注意--hard会重置所有本地更改。如果您想保留任何本地更改,请确保使用git stash或类似方法。

@hvgotcodes在他的示例中有一个变体(他的目标是HEAD提交)


1
如果你恰好有一个与之同名的远程分支,例如 forked_repo/feature,那么重置语法需要包括 remotes/ 以避免歧义。git reset --hard remotes/forked_repo/feature - edA-qa mort-ora-y
这里的 origin 是指你的远程名称。大多数人只需克隆即可成为 origin,但如果你正在 fork,则可能有多个远程,因此这对于 fork 的人来说非常重要。 - zedd45

6

您可以使用

git reset --hard HEAD

进行重置,但是这样做会丢失所有更改。 这可能会有所帮助


我试过了,但是我的项目似乎没有恢复到远程分支状态,当我执行git status时,会收到以下输出: #在TestColumnsNews分支上 #您的分支领先于'origin / TestColumnsNews' 4个提交。 # 无需提交(工作目录干净) - LuisEspinoza
它说我的分支领先了4个提交!为什么? - LuisEspinoza
这就是我当时所做的并解决了我的问题,但你的回答指引了我正确的方向,谢谢。 - LuisEspinoza
3
这个回答并没有回答所提出的问题。 - dentarg
在执行了以下命令之后:apc-2:rmr2 antonio$ git status

在分支 master 上

你的分支和 'origin/master' 分支已经分叉,

分别有 3 和 326 个不同的提交。这怎么是正确的解决方案呢?

- piccolbo

2
如果您想恢复到远程的上一个版本
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

0

有一些简单的一行代码可以做到你所要求的,但通常当我感觉我已经“搞砸了一个分支”而不是远程上的内容时,我会使用交互式变基,这样我就可以编辑提交记录(如果需要),或者删除某些行,如果我只是不想提交。请参见此处:http://book.git-scm.com/4_interactive_rebasing.html


抱歉,但是@hvgotcodes更接近正确答案。祝你好运! - LuisEspinoza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接