![删除 git 中的合并/提交](https://linux22.com/image/1378831/%E5%88%A0%E9%99%A4%20git%20%E4%B8%AD%E7%9A%84%E5%90%88%E5%B9%B6%2F%E6%8F%90%E4%BA%A4.png)
我使用 git 将一个分支合并到 master,现在经过几周和多次提交后,我想删除该功能/分支。我该怎么做?这似乎并不简单
答案1
如果您想要将其从历史记录中彻底删除,可以执行以下操作:
git rebase -i <commit to remove>^
这将打开您的默认编辑器(通常是 vi),其中包含提交列表,其中包含您要首先删除的提交。将其从列表中删除,保存并退出。这不会在没有您要删除的提交的情况下重新定位您的分支。
一种“更安全”的方法是保留历史记录,这样您就可以表明此功能曾经存在,但被故意删除了。只需使用git revert <commit to remove>
。这将创建一个额外的补丁,撤消您想要删除的提交。主要优点是您可以编辑提交消息,并解释删除此功能的原因。
答案2
如果您想撤销merge
提交,您需要执行以下操作。
- 首先,检查
git log
以找到合并提交的 ID。您还会发现与合并相关的多个父 ID(见下图)。
记下黄色显示的合并提交 ID。父 ID 是下一行中写的 ID Merge: parent1 parent2
。现在...
短篇故事:
- 切换到进行合并的分支。然后只需执行此
git revert <merge commit id> -m 1
操作即可打开vi
控制台以输入提交消息。写入、保存、退出、完成!
很长的故事:
切换到进行合并的分支。在我的例子中,它是分支
test
,我正尝试feature/analytics-v3
从中删除分支。git revert
是恢复任何提交的命令。但是恢复merge
提交时有一个棘手的技巧。您需要输入标志,-m
否则它将失败。从这里开始,您需要决定是否要恢复分支并使其看起来与之前完全一样,parent1
或者parent2
通过:
git revert <merge commit id> -m 1
(恢复为parent2
)
git revert <merge commit id> -m 2
(恢复为parent1
)
你可以通过 git log 这些父母来弄清楚你想要走哪条路,这就是所有混乱的根源。
答案3
为了完全控制操作并保留您想要保留的任何合并提交,现代方法是使用
git rebase -i -r