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


当前回答

这里的许多答案声称要使用 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 reset HEAD path_to_file

第二次检查该文件

git checkout -- path_to_file

使用 git log 获取特定版本的 hash 密钥,然后使用 git checkout <hashkey>。

注意:不要忘了在最后一个之前输入哈希,最后一个哈希标记了您的当前位置(头部)并不会改变任何东西。

对于“a.txt”,“b.txt”,“c.txt”文件:

git revert -n <commit>(例如 git revert -n HEAD 要重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新重新

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

git checkout master~5 image.png

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

这里的许多答案声称要使用 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 (冲突) 之间的任何承诺改变。