1

我添加新文件(以前作为未跟踪文件存在)并提交它们。当我在此提交之前结帐时,这些文件将被删除。他们不应该。

.gitignore 是否列出这些文件并不重要(这需要执行 git add -f ...)。

4

4 回答 4

3

它们不应该[被删除]。

是的,他们应该。提交是历史状态。你在他们提交之前检查一个状态,所以他们不应该在那里。想象一下一年后在你的项目上工作。一半的文件已重命名,有几十个新文件,无论出于何种原因,您决定查看今天的版本。当然,您不希望所有这几十个文件只是坐在那里把它弄得乱七八糟!他们不属于那里!(当然,“未跟踪的文件......与上次提交一起添加”没有任何意义 - 如果您提交了它们,它们现在会被跟踪。)

如果文件确实应该在旧提交中,那么您可能想要做的是使用交互式变基(git rebase -i <start commit> <branch>git 提供的进一步说明)将几个提交压缩在一起。也许您还需要重新排序提交,将“添加这些文件”提交推回到它所属的历史记录中更远的位置。或者,如果您在忘记添加文件后立即注意到这一点,只需添加它们并用于commit --amend修改之前的提交,而不是创建单独的提交。

最后,如果你真的以这种方式在历史记录中得到了这个集合(其他人已经拉了,所以你不想变基/修改),你可以检查旧的提交,然后从新的提交中检查文件:

git checkout <old-commit>
git checkout <new-commit> file1 file2 dir1 dir2/file3 ...
于 2010-09-13T13:17:42.347 回答
2

只需再次签出 HEAD,您就可以取回这些文件。Git checkout HEAD~2 将存储库的目录恢复到两次提交前的跟踪状态。这是完全预期的行为。

于 2010-09-13T10:17:13.437 回答
0

最后一次提交仅包含文件添加时的可能解决方案:

$ git diff HEAD^ >diff
$ git checkout HEAD^
$ git apply diff

此时分支已分离并包含以前未跟踪的文件。从现在开始,提交历史记录中的进一步检查是可能的,并且是一致的。

于 2010-09-13T13:12:13.247 回答
0

您可能想git commit --amend在之前忘记的提交上添加一些内容。

于 2010-09-13T13:15:59.017 回答