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个文件进行了修改,而我只知道最后一次稳定提交,会怎么样?也许就是这样@坦普斯:这真的取决于你希望回购历史的状态。如果希望保留包括最后三次提交的完整历史记录,那么还原是最好的选择。