Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何在不影响存储库状态的情况下将工作目录恢复到给定的提交?_Git - Fatal编程技术网

Git 如何在不影响存储库状态的情况下将工作目录恢复到给定的提交?

Git 如何在不影响存储库状态的情况下将工作目录恢复到给定的提交?,git,Git,我想将我的工作目录的全部内容恢复到保存在特定提交中的目录,但不更改存储库状态-因此,请不要分离头部状态,因为这会使我自己的头部忙于处理不相关的内容,而我只想从备份中基本恢复此文件夹内容 我是git的新手,我尽力不让这篇文章成为git的咆哮,但看在上帝的份上,为什么git checkout命令没有--wdironly开关(或类似的东西) 为什么必须重新分配负责人 缺少简单的“git restore”等价物是如此的不方便、违反直觉和令人沮丧,以至于我不禁要问:“为什么我要使用它?它的使用开销如此之大

我想将我的工作目录的全部内容恢复到保存在特定提交中的目录,但不更改存储库状态-因此,请不要
分离头部状态
,因为这会使我自己的头部忙于处理不相关的内容,而我只想从备份中基本
恢复此文件夹内容

我是git的新手,我尽力不让这篇文章成为git的咆哮,但看在上帝的份上,为什么git checkout命令没有
--wdironly
开关(或类似的东西)

为什么必须重新分配负责人

缺少简单的“git restore”等价物是如此的不方便、违反直觉和令人沮丧,以至于我不禁要问:“为什么我要使用它?它的使用开销如此之大,我甚至不能利用它来完成我想要的最简单的任务。”

不管怎么说,这里是交易: 假设主分支中有2个提交

可能还有其他分支,但我们将重点关注这一个。提交是:“第一”和“第二”,显然,“第二”是最新的

我的工作目录中还有一些我不喜欢的垃圾,所以在“恢复备份”之前可以安全地删除它的内容

然而,在我的索引中可能有一些珍贵的数据,所以如果可能的话,请不要碰它

现在:

我想获取“First”commit包含的所有文件,并将它们复制到我的工作目录中。
就这样

我怎样才能实现这个“不寻常的愿望”

我想获取“First”commit包含的所有文件,并将它们复制到我的工作目录中

您可以使用
git cherry pick
向当前分支添加所需的提交


我想将工作目录的全部内容恢复到某个提交中保存的目录,但不更改存储库状态


我的工作目录中还有一些我不喜欢的垃圾,所以在“恢复备份”之前可以安全地删除它的内容

-x(小写) 不要使用从.gitignore(每个目录)和$GIT_DIR/info/exclude读取的标准忽略规则,但仍要使用-e选项提供的忽略规则。这允许删除所有未跟踪的文件,包括生成产品

这可以用来(可能与git reset一起)创建一个原始的工作目录来测试一个干净的构建

-X(大写) 仅删除Git忽略的文件。 这可能有助于从头开始重建所有内容,但保留手动创建的文件


好吧,既然我自己找到了答案,我意识到这是个糟糕的问题

无论如何,为了您的方便-现在和未来的新手-这里是我正在寻找的git命令:

git签出*


请注意命令末尾的星号。由于
git checkout
恢复选定的文件,星号只是“所有文件”的通配符。。。你在问这个问题之前读过我的帖子,对吗?特别是关于
分离头的部分
可能会给你一个线索,让你知道
git checkout First有什么问题
;)我觉得你有点误解了我的问题。我需要将我的
工作目录的内容恢复到保存在其中一个提交中的状态-我不希望在任何分支中有任何新的提交。然而,你关于git checkout-b new_branch 7cd6289的建议在我脑海中产生了一些脚本想法:
git checkout-b tmp
git checkout master
git branch-d tmp
它仍然需要一些严重的改进,例如,用更统一的名称替换tmp并返回到以前的分支-不一定是master,但:它模拟了我想要的内容-将我的
工作目录的内容恢复到给定提交的状态,而不移动我的头。现在我唯一需要的就是给这个想法以生命。。。你能给我推荐一些git脚本教程吗?好的,tmp是什么?tmp是临时分支的名称-在我恢复工作目录后被删除的分支。
# checkout new branch from a given commit
# and switch to this branch 
git checkout -b new_branch 7cd6289
# clean all your uncommitted files
git clean -Xfd
git clean -xfd