如何返回上一个提交而不丢失Git中的最后一个提交?

问题描述 投票:11回答:2

这是我想做的。我想回到2次提交,也许可以将新提交中更改的文件重新带回。但是我不想丢失我的上一次提交。我的最后一次提交在代码中有一些错误,但我现在想保留该错误。

我阅读了一些文档,但没有一个文件清楚说明重置头部时会发生什么。例如,您是否丢失了所有提交,直到您重置为(向后)提交为止?

[我试图理解所有这些工作原理,但是我对git revertresetcheckout命令感到困惑。

[我意识到我应该隐瞒上一次提交而不是提交,但这是另一回事了。

git
2个回答
10
投票

revert进行新的提交,以还原由较早的提交所做的更改。 reset --hard将当前分支的HEAD更改为指定的提交。 checkout将工作副本切换到指定的分支或提交。

当您将分支重置为较旧的提交时,如果新的提交不是其他分支或标签祖先的一部分,则新的提交将丢失(尽管它们仍可以通过reflog进行访问)。

目前尚不清楚,您需要做什么,最可能的解决方案是revert(完全还原较旧的提交或一系列提交)和rebase -i(更改较旧的提交或从历史记录中删除) 。


14
投票

[如果您想返回,例如说以前2次提交,则只需执行git checkout HEAD~2。这将使您像以前一样。如果您在分支master上,则git checkout master将带您回到现在。但是,如果您想保留当前状态,但要在此处启动一个新的developemnt分支,则git checkout -b HEAD~2将在此处开始一个新的分支。如果您想倒带母带但又不松散当前未完成/损坏的工作,请执行

git branch wip           # New branch ends a current tip
git reset --hard HEAD~2  # Old branch rewound, get files from then
© www.soinside.com 2019 - 2024. All rights reserved.