如何仅在Git中还原文件?

时间:2018-10-29 22:26:48

标签: 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恢复到暂存区域中的先前状态。

基本上,我想直接签入登台区域而不修改本地文件。有没有一种方法可以在Git中用一个命令来完成?

这个问题不是Reset or revert a specific file to a specific revision using Git?的重复,因为那个提问者想更改工作树,但是在这里我不想更改工作树。

4 个答案:

答案 0 :(得分:1)

  

基本上,我想直接签入登台区域而不修改本地文件。有没有一种方法可以在Git中用一个命令来完成?

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

git reset commit-id <file>

答案 1 :(得分:0)

您可以git checkout特定提交的特定文件。例如,如果提交a12345保留了您要还原的b.txt的更改,则可以运行:

git checkout a12345 -- path/to/file/to/restore/b.txt

有关更多信息,请参见git checkout命令。

答案 2 :(得分:0)

该怎么做才能在实际提交时创建一个新分支,然后将主服务器重置回预览状态。然后您的提交在新分支中。

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

类似这样的东西。

答案 3 :(得分:0)

我认为重写历史记录对您来说很好。首先,使用reset --soft撤消提交,这将保留添加的文件。然后取消暂存文件,最后再次提交:

git reset --soft HEAD~
git reset -- b.txt
git commit -C HEAD@{1}

(与-C HEAD@{1}保持旧的提交消息。)