我已经对作为一组文件的一部分提交了几次的文件进行了一些更改,但现在想要将其上的更改重置/还原回以前的版本。
我做了一个 git log
随着一个 git diff
找到我需要的修订版,但是根本不知道如何将文件恢复到以前的状态。
我已经对作为一组文件的一部分提交了几次的文件进行了一些更改,但现在想要将其上的更改重置/还原回以前的版本。
我做了一个 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提交的引用,包括SHA-1,如果这是最方便的。关键是命令看起来像这样:
git checkout [commit-ref] -- [filename]
git checkout -- foo
那会重置 foo
对HEAD。你也可以:
git checkout HEAD^ foo
一次修订,等等
要恢复到最常需要的最后提交的版本,您可以使用这个更简单的命令。
git checkout HEAD file/to/restore
我刚才遇到了同样的问题而且发现了 这个答案 最容易理解(commit-ref
是要返回的日志中更改的SHA值):
git checkout [commit-ref] [filename]
这会将旧版本放在您的工作目录中,如果您愿意,可以从那里提交。
如果您知道需要返回的提交数量,可以使用:
git checkout master~5 image.png
这假设你在 master
分支,你想要的版本是5提交回来。
我想我已经找到了....来自 http://www-cs-students.stanford.edu/~blynn/gitmagic/ch02.html
有时候你只想回去忘记过去某一点的每一个变化,因为他们都错了。
从...开始:
$ git log
它显示了最近提交的列表及其SHA1哈希值。
接下来,键入:
$ git reset --hard SHA1_HASH
将状态恢复到给定提交并永久删除记录中的所有较新提交。