Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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 add *lots of files* git add b.txt git commit -m 'Update files' 现在我意识到我实际上想要在不同的提交中对b.txt进行更改。我想从提交中删除对b.txt的更改,但我想将更改保留在文件系统中。如果b.txt是一个新文件,我可以用 git rm --cached b.txt 但这不适用于在暂存区域中将b.txt还原到其先前的状态 基本上,我希望直接签出到临时区域,而不修改本地文件。有没有办法用G

我更新了文件并提交了它们,例如

git add *lots of files*
git add b.txt
git commit -m 'Update files'
现在我意识到我实际上想要在不同的提交中对
b.txt
进行更改。我想从提交中删除对
b.txt
的更改,但我想将更改保留在文件系统中。如果
b.txt
是一个新文件,我可以用

git rm --cached b.txt
但这不适用于在暂存区域中将
b.txt
还原到其先前的状态

基本上,我希望直接签出到临时区域,而不修改本地文件。有没有办法用Git中的一个命令来实现这一点


这个问题不是重复的,因为询问者想要更改工作树,但这里我不想更改工作树。

您可以git签出特定文件以进行特定提交。例如,如果提交a12345包含要还原到的b.txt更改,则可以运行:

git签出a12345--path/to/file/to/restore/b.txt


有关更多信息,请参阅命令。

如何在实际提交时创建一个新分支,然后将主机重置回预览状态。那么您的提交就在新的分支中

git branch new_branch
git reset --hard HEAD~1
git checkout new_branch

类似这样的事情。

我想重写历史对你来说是合适的。首先,通过使用
reset--soft
撤消提交,这将保留添加的文件。然后取消文件的分级,最后再次提交:

git reset --soft HEAD~
git reset -- b.txt
git commit -C HEAD@{1}
(使用
-C HEAD@{1}
提交以保留旧的提交消息。)

基本上,我希望直接签出到临时区域,而不修改本地文件。有没有办法用Git中的一个命令来实现这一点

您可以从提交中撤消对单个文件或目录的更改,但将其保留在未老化状态


git-reset-commit-id

提示:
git-reset-mixed
。codemonkeh的可能重复:该问题说明如何为特定文件/版本重置索引和工作树。我问的是如何在不覆盖工作树的情况下更新特定文件/版本的索引。戴:
reset--mixed
正是我想要的,谢谢!如果您创建一个答案,我将接受它。在这种情况下,我使用了
git reset--mixed HEAD^--b.txt
实际上
--mixed
不是必需的,因为它是
git reset
的默认模式