我添加新文件(之前作为未跟踪文件存在)并提交它们。当我在此提交之前结帐时,这些文件将被删除。他们不应该。
.gitignore是否列出这些文件无关紧要(需要执行git add -f ...)。
答案 0 :(得分:3)
他们不应该[被删除]。
是的,他们应该。提交是历史状态。你在犯罪之前检查了一个州,所以他们不应该在那里。想象一下从现在开始一年的项目工作。一半的文件已被重命名,有几十个新文件,无论出于何种原因你决定查看今天的版本。当然,你不会希望所有这几十个文件只是坐在那里杂乱无章!他们不属于那里! (当然“未跟踪的文件......添加了最后一次提交”没有任何意义 - 如果你提交了它们,它们现在被跟踪了。)
如果真正的文件已经在旧提交中,那么您可能想要做的就是使用交互式rebase(git rebase -i <start commit> <branch>
,git提供的进一步说明)来压缩一对一起承诺。也许您还需要对提交进行重新排序,将“添加这些文件”提交回其所属的历史记录中。或者,如果您在忘记添加文件后立即注意到这一点,只需添加它们并使用commit --amend
修改为先前的提交,而不是创建单独的提交。
最后,如果你确实以这种方式在历史记录中获得了这个集合(其他人已经拉了所以你不想重新定义/修改),你可以查看旧的提交,然后查看更新的文件提交:
git checkout <old-commit>
git checkout <new-commit> file1 file2 dir1 dir2/file3 ...
答案 1 :(得分:2)
再次结帐HEAD,你就会收到这些文件。 Git checkout HEAD~2将您的存储库目录恢复为您之前提交过两次提交的跟踪状态。这完全是预期的行为。
答案 2 :(得分:0)
当最后一次提交仅包含文件添加时可能的解决方案:
$ git diff HEAD^ >diff
$ git checkout HEAD^
$ git apply diff
此时分支已分离并包含以前未跟踪的文件。从现在开始,可以在提交历史记录中进一步检出并保持一致。
答案 3 :(得分:0)
您可能希望git commit --amend
能够解决您忘记的上一次提交的问题。