我是git的新手。我在集中式CVS(如TFS和SourceGear Vault)方面拥有丰富的经验。
我在本地使用git(没有遥控器)。今天,当我试图恢复自上一次提交以来所做的所有更改时,我已完全搞乱了我的项目。
我的存储库存储文档,VS项目和一些其他开发工件。总共有几千个文件。
如何使用git恢复整个存储库的最后一次提交(撤消挂起的更改说TFS)?
git reset
和git checkout
只是弄乱了我的文件,因此我不得不使用文件级备份。
通过撤消更改我的意思是:
.gitignore文件中列出的项目不应受到影响。
是否可以对文件夹(+子文件夹)级别而不是存储库级别进行此类还原?
使用Vault我可以标记一个文件夹(+子文件夹),稍后我可以回到那个标记状态。这可以用git完成吗?
另一个简单的问题 - 我可以查看文件夹中已删除的文件并根据需要恢复它们(来自某些较旧的提交)吗?我没有设法使用git state
或git log
。
答案 0 :(得分:3)
如何使用git恢复整个存储库的最后一次提交(撤消说TFS的挂起更改)? git reset和git checkout只是弄乱了我的文件所以我不得不使用我的文件级备份。
另一种选择是git checkout
,请参阅the documentation: git-checkout - 切换分支或恢复工作树文件 。例如:git checkout -- .
检出当前分支中的所有文件,从而恢复其状态。
是否可以对文件夹(+子文件夹)级别而不是存储库级别进行此类还原?
是的,git checkout -- path/to/folder
。
使用Vault我可以标记一个文件夹(+子文件夹),稍后我可以回到那个标记状态。这可以用git完成吗?
我只知道基于存储库的tags。但是,您可以签出该特定标记(或提交)的文件夹:git checkout tags/v1.0.3 -- path
或git checkout commit -- path
。
我可以查看文件夹中已删除的文件并根据需要(从一些较旧的提交中)恢复它们吗?我没有设法用git state或git log做到这一点。
例如,使用git log --name-status
。假设我在某个提交中删除了 README.md ,它将显示为D README.md
。假设它在commit abc123 中被删除,那么 abc123~1 就是之前的提交(其中 README.md 仍然存在)。然后,您可以使用git show abc123~1:README.md
在删除之前查看该文件中的内容。恢复它的简单方法:git show 5235de78d28a07d2459130e7e3041b7720563b5d~1:README.md > README.md
。
我可以在文件夹中查看已删除的文件 ...
git log --name-status -- path/to/folder
答案 1 :(得分:0)
git reset --hard HEAD
应该做的伎俩。此命令会将所有文件重置为上次提交时的文件。