0

我的仓库中有一个目录树。我git add -A第一次做。

现在我错误地删除了一个包含文件的目录并执行以下操作:

git add -A

我也丢失了我的仓库中的整个目录。或者有没有办法找回我丢失的目录?

还假设我这样做git add .我不会丢失我的目录,对吗?所以我认为没有办法使用git跟踪文件的删除?

例如,我昨天提交时删除了 3 个文件,如果我想回到昨天所有文件和目录的版本,我会看到删除的文件吗?

4

1 回答 1

2

我对你的问题的理解是这样的:

  1. 您有一个git包含一些文件和目录的存储库。
  2. 您最初添加了所有内容 ( git add -A)。想必你也承诺了。
  3. 您从存储库中删除一个目录 ( rm -rf dir),然后添加更改 ( git add -A)。我假设你然后承诺。

如果是这种情况,那么是的,您已经从存储库中删除了该目录。从git-add手册页:


-A, --all
   Like -u, but match  against files in the working tree in addition
   to the index. That means that it will find new files as well as staging modified
   content and removing files that are no longer in the working tree. 

git add -A所有更改添加到存储库 - 添加,删除,很多。

所以我认为没有办法使用git跟踪文件的删除?

我不确定你的意思是什么。您可以从 git 跟踪文件的删除。阅读手册页git-rm。或者,删除一个文件,然后运行git add -A​​:git会将删除的文件添加到索引中,允许您提交删除。所以删除被跟踪。

还假设我做了一个 git add 。我不会丢失我的目录,对吗?

您不会将目录的删除暂存到git索引中,对。但是,该目录仍然从git工作目录中消失,因为您删除了它。

例如,我昨天提交时删除了 3 个文件,如果我想回到昨天所有文件和目录的版本,我会看到删除的文件吗?

您将文件添加到存储库。git add file; git commit -m "added file". 我们称之为 commit A
接下来删除该文件,并将更改提交到存储库:(rm file; git add -A; git commit -m "Deleted file"另一种方式是git rm file)。我们称之为 commit B

如果您签出 commit B,则文件不存在。您删除了它们,提交反映了这一点。
如果你 checkout commit A,文件就在那里。该提交包含文件。

要回答您的问题:

例如,我昨天提交时删除了 3 个文件,如果我想回到昨天所有文件和目录的版本,我会看到删除的文件吗?

不。您不会看到昨天提交的文件,因为您已经提交了删除。但是,如果您在昨天提交之前签出提交,则文件就在那里。

于 2012-08-05T09:00:49.587 回答