使用 git 摆脱特定的本地提交

Get rid of specific local commits with git

这是我的场景。 我正在针对分支 A 工作。我在本地将一个功能分支从分支 B 合并到分支 A。之后我在分支 A 上做了一些更改并提交了 Y。我注意到合并导致了问题,我需要撤消此合并并仅保留 Y 提交。 我没有从本地推送到远程分支。所有更改都在传出提交上。 我怎样才能做到这一点而不丢失在提交 Y 上完成的工作而只是推动那个? 谢谢

顺便说一句:我正在使用 Source Tree(我知道这可能是一个命令行,但如果有人知道如何使用 source tree 来做到这一点那就太棒了)

只要提交 Y 中没有任何内容与分支 B 中的任何合并更改直接冲突,您应该能够 运行 交互式变基并删除合并提交。本人对Source Tree不熟悉,可以提供终端命令:

(来自分支A):git rebase -i HEAD~3(任意3,你只需要看几个commit)

找到合并提交,按照交互式变基指令,您可以将单词 pick 更改为 drop。保存并退出,git 将重播提交,但跳过您指定要删除的提交。

注意:如果您对失去工作感到不安,我建议您推送到您的远程仓库,然后尝试交互式变基。如果它按你想要的方式工作,那么强制更新你的 repo,如果它没有按预期工作,你将从备份中提取。

希望对您有所帮助!