一旦被忽略的文件在git重置后就消失了

  • 本文关键字:git 消失了 文件 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

然后,我对init、add和commit进行git操作。

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&再次提交。

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

到目前为止一切顺利。

但现在我想回到我第一次提交时的版本,所以我很难重置。

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"之前已经承诺了很多次,"清空.git ignore并重做所有内容"是不可能的。

我用关键词"git.gitignore reset"搜索了stackoverflow,但一无所获。欢迎提出任何建议。

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

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

最新更新