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


当前回答

如果您想要将文件转换为以前的承诺(并且您想要转换已承诺的文件),您可以使用

git checkout HEAD^1 path/to/file

git checkout HEAD~1 path/to/file

然后,只是步行,并采取“新”版本。

武装着一个承诺可以有两个父母在合并的情况下,你应该知道,头1是第一个父母,头1是第二个父母。

或者它会工作,如果树上只有一个父母。

其他回答

如果你知道你需要回去多少承诺,你可以使用:

git checkout master~5 image.png

这假设你在主分支,你想要的版本是5个承诺回来。

git checkout -- foo

這將重新安裝 foo 到 HEAD. 您也可以:

git checkout HEAD^ foo

一次重新审查等。

git revert <hash>

它听起来像你认为 git revert 只会影响最新的承诺。

它不会解决你的问题,如果你想转换一个更改在一个特定的文件,并承诺更改超过该文件。

要转到文件的先前命令版本,请获取命令号,然后说EB917a1

git checkout eb917a1 YourFileName

如果你只需要回到最后的承诺版本

git reset HEAD YourFileName
git checkout YourFileName

这只会带你到文件的最后一个承诺状态。

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

git checkout [commit-ref] [filename]

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