如何在远程分支中获取版本并忘记我在工作目录中所做的更改

时间:2009-10-01 01:48:34

标签: git

我在工作目录中进行了更改并执行了'git commit'

然后我做了'git pull'。 Git尝试在远程跟踪分支中提取更改并自动为我合并。但是有些文件存在冲突。

那么我如何才能在远程分支中取出版本并忘记我在特定文件中所做的更改?

我尝试'git checkout - chrome / browser / browser.cc',但它说我正在合并中,它不会让我这样做。

# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       unmerged:   chrome/browser/browser.cc
#       unmerged:   chrome/renderer/render_view.cc
#       unmerged:   chrome/test/automation/automation_proxy_uitest.cc

谢谢。

3 个答案:

答案 0 :(得分:5)

似乎git reset --hard <remote_commit>会达到你的目的。这将丢弃您的本地提交,并将当前分支的HEAD指向远程提交。

另外,你试过git checkout -f吗?这可能会说服它做你所要求的。

答案 1 :(得分:1)

如果您希望完全忘记上次提交,请执行git reset --hard HEAD^,将主分支恢复到之前的状态 - 您还可以执行git log,选择您想要的提交返回,做git reset --hard <sha1>。但是,如果其他人已撤消您现在希望忽略的提交,则与我们的策略合并更安全,例如git checkout -b temp --track origin/mastergit merge --strategy=ours mastergit push。这将保留您所做更改的历史记录,但会从生成的树中删除它们。

如果它只是几个文件,您当然可以选择手动修复冲突,从origin/master中选择版本。任何合适的合并工具都应该允许这样做。

答案 2 :(得分:0)

你可以

git reset --hard HEAD

恢复本地更改,然后只需将git pull远程更改到(现在)干净的本地存储库中。