我想将我的工作目录的整个内容恢复到某个提交中保存的内容,但是没有对存储库状态进行任何更改 - 所以,请不要detached head state
,因为它让我自己的头忙于无关的东西,当我想要的只是基本的restore this folder contents from that backup
。
我是git的新手,我尽力不让这个帖子成为一个git rant,但是为了上帝的缘故,为什么git checkout命令没有--wdironly
开关(或类似的东西)?
为什么HEAD重新分配是强制性的?
缺乏简单的“git restore”等同于如此不方便,违反直觉和令人沮丧,我发现自己在问:“为什么我甚至使用它?它在使用上有这样的开销,我甚至无法利用它来做最简单的事情我希望的任务。“
假设master分支中有2个提交。
可能还有其他一些分支,但我们将专注于这一个。提交是:“第一”和“第二”,显然是“第二”是最新的。
我的工作目录中还有一些我不关心的垃圾,因此在“恢复备份”之前可以安全地删除其内容。
但是,我的索引中可能会有一些宝贵的数据,所以请尽可能不要碰它。
现在:
我想获取“First”提交包含的所有文件,并将它们复制到我的工作目录 而已。
我如何实现这种“不寻常的愿望”?
答案 0 :(得分:2)
好的,既然我自己找到了答案,我意识到这是一个很糟糕的问题。
无论如何,为了您的方便 - 现在和未来的新手 - 这里是我正在寻找的git命令:
git checkout <given commit SHA> *
请注意命令末尾的星号。由于git checkout <commit> <filename>
恢复了所选文件,因此星号只是&#34;所有文件的通配符&#34;。
答案 1 :(得分:0)
我想把所有文件都带到第一个&#34; commit包含并将它们复制到我的工作目录。
您可以使用git cherry-pick <sha1>
将所需的提交添加到当前分支
我想将工作目录的全部内容恢复到某些提交中保存的内容,但不对存储库状态进行任何更改
# checkout new branch from a given commit
# and switch to this branch
git checkout -b new_branch 7cd6289
我的工作目录中还有一些我不关心的垃圾,因此可以安全删除其内容,然后再恢复备份&#34;。
# clean all your uncommitted files
git clean -Xfd
git clean -xfd
-x(小写)
不要使用从.gitignore(每个目录)和$ GIT_DIR / info / exclude读取的标准忽略规则,但仍然使用-e选项给出的忽略规则。这允许删除所有未跟踪的文件,包括构建产品。
可以使用它(可能与git reset一起使用)来创建一个pristine工作目录来测试干净的构建。
-X(大写)
仅删除Git忽略的文件。 这可能有助于从头开始重建所有内容,但保留手动创建的文件。