我已经对作为一组文件的一部分提交了几次的文件进行了一些更改,但现在想要将其上的更改重置 / 还原回以前的版本。
我已经做了一个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]