如何还原非最新提交,但仍保持头部完好无损



下面是我的git历史:

commit-X: LOCAL HEAD which has not been push to remote commit-A: The commit I want to undo and it is not push to remote yet. commit-B: The REMOTE HEAD.

是否可以撤消提交 A 并仍然让我的本地头指向提交 X?

谢谢。

如果您想删除 commit-A 同时在 commit-x 下保留相同的更改,一种选择是运行git reset --soft HEAD~2,这将删除最后 2 个提交,同时保持文件原样。从这里,您可以重新应用 commit-x。

您可以尝试交互式rebase,并带有git rebase --interactive HEAD~2

这会将HEAD和它之前的提交标记为变基;对于 3 个提交,使用HEAD~3等。这意味着您可以更改提交本身,仅更改消息,从 1 中做出更多提交,从许多提交中进行 1 次提交。

实际上,您的默认文本编辑器将显示提交列表,以及为每个提交执行的操作。保存文件(退出或其他任何内容(后,git将尝试应用您的更改。

如果你想核弹,完全抹去它,那么你可以简单地删除整条commit-A线.不接触commit-X行意味着git将完全按照您所做的方式重新应用提交(相同的更改,相同的消息(,而无需执行任何其他操作。

在做任何破坏性的git事情之前,你可以养成在你当时所在的位置创建一个新分支的习惯。这样,如果您的提交手术横着走,您始终可以安全地回到原来的分支。有关更广泛的安全网,请查看git reflog

请注意,更改提交(消息、内容等(意味着它具有新的哈希值,并且所有下游提交(在更改后进行(都必须重做。这很重要,因为如果您在更改遥控器之前已经推送到遥控器,则无法同步遥控器,除非您执行--force推送,但这可能会使其他各方不满意。

最新更新