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


当前回答

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

git checkout HEAD^1 path/to/file

git checkout HEAD~1 path/to/file

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

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

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

其他回答

首页 > 首页 > 目标文件

git reset HEAD path_to_file

第二次检查该文件

git checkout -- path_to_file

如果你曾经有一个版本的文件在承诺 $ A,然后后来做了两个不同的承诺 $ B 和 $ C (所以你正在看到的是第三个字符串的文件),如果你说“我想要返回第一个”,你真的意味着吗?

如果你想摆脱第二个和第三个 iteration 的变化,这是非常简单的:

$ git checkout $A file

命令要求“我想检查由命令A记录的状态的文件”。

另一方面,你指的是摆脱改变的第二个 iteration(即承诺 $B)引入,同时保持什么承诺 $C 做到文件,你会想转换 $B。

$ git revert $B

請注意,任何人創建的承諾 $ B 可能沒有非常規律,並可能在同一承諾中進行了完全無關的變化,而這個逆轉可能會觸摸其他檔案,而不是檔案,你會看到有害的變化,所以你可能想仔細檢查結果,然後做到這一點。

git checkout ref♰commitHash -- filePath

吉。

git checkout HEAD~5 -- foo.bar
or 
git checkout 048ee28 -- foo.bar

至于 git v2.23.0 有一个新的 git 恢复方法,这应该是由 git checkout 负责的一部分(即使接受的答案提到, git checkout 是相当困惑的)。

这个命令的默认行为是恢复一个工作树的状态,内容来自源参数(在您的情况下将是一个承诺哈希)。

因此,基于Greg Hewgill的答案(假设承诺哈希是c5f567)命令会看起来如下:

git restore --source=c5f567 file1/to/restore file2/to/restore

或者,如果你想恢复一个承诺的内容之前 c5f567:

git restore --source=c5f567~1 file1/to/restore file2/to/restore
git log --oneline  // you see commits, find commit hash to which you want reset
git diff y0urhash src/main/.../../YourFile.java   // to see difference
git reset y0urhash src/main/.../../YourFile.java   // revert to y0urhash commit
git status                                        // check files to commit
git commit -m "your commit message"
git push origin