如何在保持推送提交的同时将代码恢复到特定提交?

时间:2012-05-02 10:21:46

标签: git

想象一下以下提交:

commit 1
commit 2
commit 3

我的文件a,bc。我添加文件d,在接下来的3次提交中我修改它(我在heroku上测试一些JS)。我现在还有三个提交:

commit 4 ( this add the d file, the other 2 commits only modify it )
commit 5
commit 6

如何在保持推送提交4 5和6的同时将工作目录返回到commit 3状态? (文件d不应该存在于提交3中,或者我希望它至少显示为未跟踪)

2 个答案:

答案 0 :(得分:1)

git reset <commit3>其中<commit3>是提交3(或HEAD^^^)的SHA1,会将工作目录重置为提交3,同时保留d未跟踪。

(但是,如果您要在一次提交中重新添加它,我建议您改为git rebase -i HEAD^^^;然后您可以将三个最新提交压缩在一起。)

答案 1 :(得分:0)

在这里看看“探索历史”:

http://schacon.github.com/git/gittutorial.html

此外:

http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html

并使用git revertgit reset

如果您只想检查先前提交中的内容,可以git checkout <commit>-<filename>但是请阅读有关所有这些内容的手册页;)