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


当前回答

这是一个非常简单的步骤. 检查文件到我们想要的承诺ID,这里一个承诺ID之前,然后只是 git承诺修改,我们已经完成了。

# git checkout <previous commit_id> <file_name>
# git commit --amend

如果我们想把任何文件带到承诺的顶部的任何先前承诺 ID,我们可以轻松地做到。

其他回答

如果您正在使用 Git Extensions 并只想返回文件的父母承诺,您可以选择包含您想要返回的更改的承诺,然后在详细信息面板中选择“Diff”选项卡,右键单击您想要返回的文件,然后“返回文件(s)到”....,然后“A”(父母)

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

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

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

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

好运

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

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

假设你想要的承诺的哈希是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 checkout -- foo

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

git checkout HEAD^ foo

一次重新审查等。