Git 如何删除已推送到原点的合并分支
例如,我有一个缺陷问题,开发人员创建了新的分支,并在分支名称“fix#1_后院_数据显示”中修复了它。然后,我将其合并到分支“beta”中进行测试。过了一会儿,另一个测试人员将另一个分支(如“fix_2”和“fix_3”)合并到“fix_20”中,并对其进行测试。在那之后,我发现我的第一个合并的“fix#1#u backward_data_display”分支有缺陷,使我们的应用程序不稳定 现在,如何删除已推送到原点的合并分支,而不干扰“fix_2”和“fix_3”到“fix_20”?简短回答 在Git 如何删除已推送到原点的合并分支,git,merge,gitlab,Git,Merge,Gitlab,例如,我有一个缺陷问题,开发人员创建了新的分支,并在分支名称“fix#1_后院_数据显示”中修复了它。然后,我将其合并到分支“beta”中进行测试。过了一会儿,另一个测试人员将另一个分支(如“fix_2”和“fix_3”)合并到“fix_20”中,并对其进行测试。在那之后,我发现我的第一个合并的“fix#1#u backward_data_display”分支有缺陷,使我们的应用程序不稳定 现在,如何删除已推送到原点的合并分支,而不干扰“fix_2”和“fix_3”到“fix_20”?简短回答
beta
分支中:
git revert-m1
beta
分支中,要再次合并此分支,您需要在合并之前还原(再次)此Git revert
引入的提交
较长版本
Git中撤销提交的命令是revert
。对于合并提交,需要使用-m
开关指定“主线”分支。在您的情况下,它可能应该是1:
通常无法还原合并,因为您不知道合并的哪一侧应被视为
主线。此选项指定主线的父编号(从1开始),并允许还原到
反转相对于指定父项的更改
还原合并提交声明您永远不会希望合并带来的树更改。作为一个
结果,以后的合并只会带来由提交引入的树更改,而这些提交不是合并的祖先
以前还原的合并。这可能不是你想要的
有关更多详细信息,请参阅revert-a-Faulture-merge How To[1]
(来源:git帮助还原
)
下面的sh
脚本演示了这一点。第一个revert
命令还原合并fix1
分支的提交,在这种情况下,它是倒数第二个提交,即HEAD^
。还原后,在再次合并fix1
分支之前,需要使用另一个revert
命令撤消还原:
#!/bin/sh
git init test
cd test
touch a
git add a
git commit -m a
git checkout -b fix1
touch b
git add b
git commit -m b
git checkout -b fix2 master
touch c
git add c
git commit -m c
git checkout master
git merge --no-ff --no-edit fix1
git merge --no-ff --no-edit fix2
git revert --no-edit HEAD^ -m 1
git checkout fix1
echo "fix b" > b
git add b
git commit -m bb
git checkout master
# git merge fix1 # this will give an error!
# revert changes introduced by revert before merging
git revert --no-edit HEAD
git merge --no-ff --no-edit fix1
我在这里找到了解决方案:
branch_to_revert="fix1"; git log --all --pretty=format:"%H %s" | grep -i "Merge branch '$branch_to_revert'" | grep -v "Revert" | awk '{print $1}' | xargs git revert -m 1
你说“删除合并的分支”是什么意思?从远程删除它,或者恢复您在此分支中所做的承诺?对于误解,很抱歉,我在这里找到了解决方案:#branch=“fix1”;git log--all--pretty=format:“%H%s”| grep-i“Merge branch'$branch'”| grep-v“Revert”| awk'{print$1}'| xargs git Revert-m1