我如何将修改的文件转换为以前的修订,在一个特定的 commit hash (我通过 git log 和 git diff 确定)?


当前回答

要回到最后一个承诺的版本,这是最常用的,你可以使用这个更简单的命令。

git checkout HEAD file/to/restore

其他回答

我现在有相同的问题,我发现这个答案是最容易理解的(commit-ref 是您想要返回日志中的变更的 SHA 值):

git checkout [commit-ref] [filename]

这将把旧版本放在你的工作目录中,从那里你可以承诺它,如果你愿意。

如果您在最后的命令中犯下错误的文件,请遵循指示:

开源树,改变这个承诺

此分類上一篇

更改行,并找到你的承诺,错误的文件发送为承诺

此分類上一篇

你可以看到你的更改列表在这个承诺选择它,然后点击... 按钮右侧... 点击逆文件,然后你可以看到它在文件状态选项卡在左侧下方然后点击不步骤:

此分類上一篇

打开您的视觉工作室代码,然后返回,完成您的删除文件之后,您可以在源树上看到您的最后一个承诺的结果。

此分類上一篇

假设你想要的承诺的哈希是c5f567:

git checkout c5f567 -- file1/to/restore file2/to/restore

git checkout man 页面提供更多信息。

如果你想在 c5f567 之前返回承诺,添加 ~1 (在 1 是你想返回的承诺的数量,它可以是任何东西):

git checkout c5f567~1 -- file1/to/restore file2/to/restore

作为一个侧面注意事项,我一直对这个命令不舒服,因为它用于普通事物(分支之间的变化)和不寻常的破坏性事物(工作目录的变化)。


有一个新的 git 恢复命令,它是专门设计的恢复工作复制文件已被修改。 如果你的 git 足够新,你可以使用这个命令,但文档来了一个警告:

这个命令是实验性的,受害者可能会改变。

这里的许多答案声称要使用 git reset... <file> 或 git checkout... <file> 但这样做,你会放弃每一个修改的 <file> 承诺后承诺你想转换。

如果你想重新转换一个承诺的单一文件的变更,就像 git revert 会做的,但只为一个文件(或说一个承诺文件的子组),我建议使用 git diff 和 git 应用的类似(与 <sha> = 承诺的哈希你想重新转换) :

git diff <sha>^ <sha> path/to/file.ext | git apply -R

基本上,它将首先产生与你想要逆转的变更相匹配的插件,然后逆转应用插件,以放下这些变更。

当然,它不会工作,如果逆转的线条是由 <sha1> 和 HEAD (冲突) 之间的任何承诺改变。

你可以在四个步骤中完成:

返回整个承诺与您想要具体返回的文件 - 它将创建一个新的承诺在您的分支软重定义承诺 - 删除承诺并将变更移动到工作区域 手动点击文件返回并承诺他们下载所有其他文件在您的工作区域

您需要在终端中输入的内容:

git revert <commit_hash> git reset HEAD~1 git add <file_i_want_to_revert> && git commit -m'reverting file' git checkout.

好运