我一直在一个项目中工作,为了进行备份,以及将我的测试环境与生产环境同步,我创建了一个GIT存储库(在GitHub中)。
我的生产环境中有很多文件,我不需要,也不想在存储库或测试环境中。但是,当我第一次同步时,我忘了将它们包含在.gitignore
文件中。所以我将相应的行添加到.gitignore
文件中并删除了测试环境中的文件。
问题是我刚刚与生产环境同步,所有这些文件都被删除了。它们都不是关键文件所以,如果我无法恢复它们就不会有什么问题。有些甚至是垃圾。但是我发现很多这些文件很方便,所以我想只在生产中恢复它们。
(它们不是几个文件,而是几百个文件)
P.S。我仍然需要从存储库中清理一些文件,但这些文件是生产中的关键文件。在没有在生产中删除它们的情况下,在存储库中删除它们的正确方法是什么?
答案 0 :(得分:0)
您可以备份本地存储库目录,因此将来与生产存储库同步不会有任何影响,因此您可以检索文件。
备份本地存储库后,在支持的目录中发出git log
以浏览提交历史记录,并找到已删除这些文件的提交。
$ git log
commit 7b37eb6bd946b1fcb28549e83d5bb17d9eee8b56
Author: A committer <committer@somewhere.com>
Date: Wed Nov 20 21:56:09 2013 -0200
This commit was one after the commit in which files were deleted.
commit fe14476246c235e674b1e741745ed855454c0105
Author: A committer <committer@somewhere.com>
Date: Wed Nov 20 21:55:18 2013 -0200
In this commit files were _deleted_.
然后发出git revert [commit number which deleted files]
(即git revert fe1447
)并恢复已删除文件的提交,这些文件将会恢复。
关于git的一个有趣的教程是http://www-cs-students.stanford.edu/~blynn/gitmagic/,没有太多的阅读和充满好的例子。
答案 1 :(得分:0)
如果提交abcdef
是您删除这些文件并将其添加到.gitignore
的文件,则可以像上次提交时那样恢复文件(请注意^
表示该提交的父级:
git checkout abcdef^ -- path/to/removed/file path/to/another/removed/file ...
如果您接下来执行git status
,您将暂停提交刚刚恢复的文件(作为新文件)。