一旦忽略文件在git reset --hard后消失

时间:2014-11-11 03:53:37

标签: git

这个问题有点难以解释,让我一步一步向你展示。

首先,我有一个空文件夹,我添加了一些文件(a& b)和一个忽略文件b的.gitignore文件。

work@Work-PC:~/gitTest$ ls -a
.  ..
work@Work-PC:~/gitTest$ echo "123" > a
work@Work-PC:~/gitTest$ echo "456" > b
work@Work-PC:~/gitTest$ echo "b" > .gitignore

然后,我git init,git add和git commit。

work@Work-PC:~/gitTest$ git init
Initialized empty Git repository in /home/work/gitTest/.git/
work@Work-PC:~/gitTest$ git add -A
work@Work-PC:~/gitTest$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   .gitignore
#   new file:   a
#
work@Work-PC:~/gitTest$ git commit -m "c1"
[master (root-commit) 5e032d6] c1
 2 files changed, 2 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 a

您可以看到文件b被忽略。

但现在我突然意识到我不应该在第一时间忽略b。所以我清空了.gitignore和git add&amp; commit。

work@Work-PC:~/gitTest$ echo "" > .gitignore
work@Work-PC:~/gitTest$ git add -A
work@Work-PC:~/gitTest$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   .gitignore
#   new file:   b
#
work@Work-PC:~/gitTest$ git commit -m "c2"
[master 0c25718] c2
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 b

到目前为止,一切都很顺利。

但现在我想在我第一次提交时回到版本,所以我git reset --hard。

work@Work-PC:~/gitTest$ git reset --hard HEAD^
HEAD is now at 5e032d6 c1
work@Work-PC:~/gitTest$ ls
a

我发现文件b丢失了!那不是我想要的。

我希望文件b在.gitignore清空之前保留为原始版本,并且只有在.gitignore清空后才能通过git跟踪。

我认为文件b消失的原因是当我在清空.gitignore后第二次提交时,git认为创建了一个新文件b,所以当我重置为早期提交时,git会删除该文件。

我该如何解决这个问题?在实际案例中,我已经在“清空.gitignore”之前已经提交过很多次了,“在第一个地方清空.gitignore并且重做一切”是不可能的。

我用关键字“git .gitignore reset”搜索了遍历stackoverflow并且什么也没得到。任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:2)

这是Git方面的正确和理想的行为。如果您不希望删除更改,请不要使用--hard

只需使用git reset <commit id>,然后手动选择要丢弃的更改。