撤消git pull

时间:2011-01-17 23:54:15

标签: git version-control

我看到的用于撤消git的问题与我的略有不同。

这就是我所做的:

目录A中有一个项目(不是回购)。我在其中初始化了一个存储库,添加了文件,但没有提交任何内容。然后我从存储库B中取出,它覆盖了一堆我的分段文件。

我的印象是我可以使用git reset --hard撤消合并。当然,这只是检查了我刚刚提交的提交的HEAD。

在我做这个拉动之前,我应该分支并提交一些东西,后见之明很好。有什么方法可以让我的旧的非分页文件恢复?

5 个答案:

答案 0 :(得分:29)

git pullgit fetch + git merge相同。合并步骤覆盖了您的更改。要恢复到合并之前的状态,请使用git log查找最新的提交,然后使用git reset --hard 1234abcd,其中1234abcd是所需提交的哈希值。

请注意,重置后git pull会再次合并更改。要将更改还原为商品,请使用git revert,这将创建一个反向更改的其他提交。

答案 1 :(得分:13)

似乎有一个答案可以在这里恢复分阶段文件:

Recovering added file after doing git reset --hard HEAD^

答案 2 :(得分:3)

要么重置为之前的HEAD(即您在存储库中的提交,未从远程更新),要么使用git reflog。后者显示在您的存储库中执行的操作列表,git pull命令应该是其中的一部分。只需git reset --hard X到该命令之前的状态。

或者只是分支掉之前的HEAD(你可以删除/覆盖前一个分支),在那里进行更改并再次git pull ...

答案 3 :(得分:1)

我认为你现在无法完全康复。您可以做的最好的事情是git status来检查哪些文件仍然完好无损。如果未提交的文件不在此处,则会丢失。

下次,请考虑在git stash之前使用git pull,或者更好的是,使用git fetch


如果您是高级GIT用户,并且文件真的重要

如果文件已暂存,您可以从对象存储库中提取它们。但这些直接进入git胆量,我认为你不应该尝试。

如果你真的想要,请阅读以下内容:

答案 4 :(得分:0)

2011年1月17日,下午6:53更新

重新阅读您的问题。我忽略了你从项目b中提取而不是将文件复制到项目中。鉴于您的情况,我不确定我的答案是否仍然有效。我认为您最好的选择是关注geoffreyd's answer并查看StackOverflow问题Recovering added file after doing git reset --hard HEAD^的答案。

原始答案

只需git checkout -- <file>

以下是我运行以确认上述内容的示例......

# Create a test directory and some test files
$ mkdir blah
$ echo "I've been overwritten" > test1.txt
$ cd blah
$ echo "I'm the real test1.txt" > test1.txt
$ git init .
Initialized empty Git repository in /Users/matthew/blah/.git/
$ git add .
$ cp ~/test1.txt .
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   test1.txt
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   test1.txt
#
$ cat test1.txt
I've been overwritten
$ git checkout -- test1.txt
$ cat test1.txt
I'm the real test1.txt

当您执行git status时,它会告诉您使用git checkout -- <file>来放弃工作目录中的更改。如果我正确地阅读你的问题,那就是你想要做的。