Git 如何将代码恢复到特定的提交,同时保持推式提交?

Git 如何将代码恢复到特定的提交,同时保持推式提交?,git,Git,想象一下以下情况: commit 1 commit 2 commit 3 其中有文件a、b和c。我添加文件d,并在接下来的3次提交中修改它(我正在heroku上测试一些JS)。我现在还有三项承诺: commit 4 ( this add the d file, the other 2 commits only modify it ) commit 5 commit 6 如何将工作目录返回到commit 3状态,同时保持推式提交4 5和6?(提交3时文件d不应该存在,或者我希望它至少显示为未跟

想象一下以下情况:

commit 1
commit 2
commit 3
其中有文件
a、b
c
。我添加文件
d
,并在接下来的3次提交中修改它(我正在heroku上测试一些JS)。我现在还有三项承诺:

commit 4 ( this add the d file, the other 2 commits only modify it )
commit 5
commit 6
如何将工作目录返回到
commit 3
状态,同时保持推式提交4 5和6?(提交3时文件
d
不应该存在,或者我希望它至少显示为未跟踪)

git reset
其中
是提交3的SHA1(或
头^^ ^
)将在保持
d
未跟踪的同时将工作目录重置为提交3

(但是,如果您打算在一次提交中重新添加它,我建议您改为使用
git-rebase-I HEAD^^^
;然后可以将最近的三次提交挤在一起。)

git-reset
其中
是提交3的SHA1(或
HEAD^^
)将工作目录重置为提交3,同时保持
d
未跟踪

(但是,如果您打算在一次提交中重新添加它,我建议您改为使用git rebase-I HEAD^^^;然后您可以将最近的三次提交挤在一起。)

在这里查看一下“探索历史”:

此外:

并使用
git revert
git reset

如果您只想检查以前提交的内容,您可以
git checkout-
,但一定要阅读所有这些的手册页;)

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

此外:

并使用
git revert
git reset


如果您只想检查以前提交的内容,您可以
git checkout-
,但一定要阅读所有这些的手册页;)

但是,这是否也会将头向后移动三次?我希望头部保持在原来的位置。@Tempus:你能解释一下为什么要取消跟踪
d
?我能想到的第一个备选方案是
git checkout HEAD^^ ^
,但它也会移动
HEAD
。我一直在用JS api进行一系列提交实验。在目前的情况下,删除
d
并提交修改很容易,但我在想,如果我对100个文件进行了修改,而我只知道最后一次稳定提交,会怎么样?也许就是这样@坦普斯:这真的取决于你希望回购历史的状态。如果您想保留包括最后三次提交的完整历史记录,那么还原是您最好的选择。但是,这是否也会将头三次提交移回?我希望头部保持在原来的位置。@Tempus:你能解释一下为什么要取消跟踪
d
?我能想到的第一个备选方案是
git checkout HEAD^^ ^
,但它也会移动
HEAD
。我一直在用JS api进行一系列提交实验。在目前的情况下,删除
d
并提交修改很容易,但我在想,如果我对100个文件进行了修改,而我只知道最后一次稳定提交,会怎么样?也许就是这样@坦普斯:这真的取决于你希望回购历史的状态。如果希望保留包括最后三次提交的完整历史记录,那么还原是最好的选择。