我看到的用于撤消git的问题与我的略有不同。
这就是我所做的:
目录A
中有一个项目(不是回购)。我在其中初始化了一个存储库,添加了文件,但没有提交任何内容。然后我从存储库B中取出,它覆盖了一堆我的分段文件。
我的印象是我可以使用git reset --hard
撤消合并。当然,这只是检查了我刚刚提交的提交的HEAD。
在我做这个拉动之前,我应该分支并提交一些东西,后见之明很好。有什么方法可以让我的旧的非分页文件恢复?
答案 0 :(得分:29)
git pull
与git fetch
+ git merge
相同。合并步骤覆盖了您的更改。要恢复到合并之前的状态,请使用git log
查找最新的提交,然后使用git reset --hard 1234abcd
,其中1234abcd是所需提交的哈希值。
请注意,重置后git pull
会再次合并更改。要将更改还原为商品,请使用git revert
,这将创建一个反向更改的其他提交。
答案 1 :(得分:13)
似乎有一个答案可以在这里恢复分阶段文件:
答案 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)
重新阅读您的问题。我忽略了你从项目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>
来放弃工作目录中的更改。如果我正确地阅读你的问题,那就是你想要做的。