协慌网

登录 贡献 社区

使用 Git 将特定文件重置或还原到特定版本?

我已经对作为一组文件的一部分提交了几次的文件进行了一些更改,但现在想要将其上的更改重置 / 还原回以前的版本。

我已经做了一个git log和一个git diff来找到我需要的修订版,但是根本不知道如何将文件恢复到以前的状态。

答案

假设您想要的提交哈希是c5f567

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

git checkout手册页提供了更多信息。

如果你想恢复到c5f567之前的提交,请追加~1 (适用于任何数字):

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

作为旁注,我总是对这个命令感到不舒服,因为它用于普通事物(在分支之间切换)和不寻常的破坏性事物(丢弃工作目录中的变化)。

您可以使用 diff 命令快速查看对文件所做的更改:

git diff <commit hash> <filename>

然后,要将特定文件还原到该提交,请使用 reset 命令:

git reset <commit hash> <filename>

如果您进行了本地修改,则可能需要使用--hard选项。

管理航点的良好工作流程是使用标签在时间轴中清晰地标记点。我不太明白你的最后一句话,但你可能想要的是从前一个时间点分支出一个分支。为此,请使用方便的 checkout 命令:

git checkout <commit hash>
git checkout -b <new branch name>

然后,当您准备合并这些更改时,可以针对主线对其进行重新绑定:

git checkout <my branch>
git rebase master
git checkout master
git merge <my branch>

你可以使用任何对 git commit 的引用,包括 SHA-1,如果这是最方便的。关键是命令看起来像这样:

git checkout [commit-ref] -- [filename]

假设您想要的提交哈希是c5f567

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

git checkout手册页提供了更多信息。

如果你想恢复到c5f567之前的提交,请追加~1 (适用于任何数字):

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

作为旁注,我总是对这个命令感到不舒服,因为它用于普通事物(在分支之间切换)和不寻常的破坏性事物(丢弃工作目录中的变化)。

您可以使用 diff 命令快速查看对文件所做的更改:

git diff <commit hash> <filename>

然后,要将特定文件还原到该提交,请使用 reset 命令:

git reset <commit hash> <filename>

如果您进行了本地修改,则可能需要使用--hard选项。

管理航点的良好工作流程是使用标签在时间轴中清晰地标记点。我不太明白你的最后一句话,但你可能想要的是从前一个时间点分支出一个分支。为此,请使用方便的 checkout 命令:

git checkout <commit hash>
git checkout -b <new branch name>

然后,当您准备合并这些更改时,可以针对主线对其进行重新绑定:

git checkout <my branch>
git rebase master
git checkout master
git merge <my branch>

你可以使用任何对 git commit 的引用,包括 SHA-1,如果这是最方便的。关键是命令看起来像这样:

git checkout [commit-ref] -- [filename]