我想自动清理远程分支机构。我希望能够检查一个分支是否已经被合并到master中。最初,我的计划是使用git merge-base来查看最后的常见提交。检查SQUASHED时Git分支是否已合并到主控中?
但是,事实证明,我们在我们将它们合并到主设备中时压缩了所有分支。由于这会创建一个新的提交散列,因此我无法在主分支和我的分支之间找到常见提交。
如何在合并时确定分支是否合并?
在此先感谢!
我想自动清理远程分支机构。我希望能够检查一个分支是否已经被合并到master中。最初,我的计划是使用git merge-base来查看最后的常见提交。检查SQUASHED时Git分支是否已合并到主控中?
但是,事实证明,我们在我们将它们合并到主设备中时压缩了所有分支。由于这会创建一个新的提交散列,因此我无法在主分支和我的分支之间找到常见提交。
如何在合并时确定分支是否合并?
在此先感谢!
你可以做一个实验性的合并,并检查是否引入了任何改变,例如:
git checkout -b foo-merge-test-branch master
git merge --squash foo
if [ -n "$(git status --porcelain)" ]; then
echo "foo has not been merged";
else
echo "foo is already merged";
fi
git reset --hard && git checkout master && git branch -d foo-merge-test-branch
如果没有在原来的git merge --squash foo
更改的文件都因为看到master
进一步冲突的更改这只会工作然后。
这里有一个办法:
如果本地分支的HEAD与已合并的PR的HEAD相对应,则可以安全地将其删除。无论公关如何合并(完全合并,快速前进,壁球和合并),这都将起作用。
我在delete-squashed-branches脚本中实现了这种方法。这里的用法是什么样子:
(master) $ git branch
delete-merged-prs
fixup
unmerged-branch
* master
(master) $ delete-squashed-branches
Finding local branches which were merged onto origin/master via GitHub...
warning: deleting branch 'delete-merged-prs' that has been merged to
'refs/remotes/origin/delete-merged-prs', but not yet merged to HEAD.
Deleted branch delete-merged-prs (was 325a42b).
warning: deleting branch 'fixup' that has been merged to
'refs/remotes/origin/fixup', but not yet merged to HEAD.
Deleted branch fixup (was e54f54b).
(master) $ git branch
unmerged-branch
* master
(因为枝干通过壁球&合并合并到主的警告,可以忽略不计)
注意事项:
pip install pygithub
使用脚本。origin/(current branch)
的本地分行。所以你需要在master
,develop
或其他任何分支上运行它。
不完全可靠,但'git log --grep =“merge $ BRANCH”'或者其他的东西可能会起作用,如果您在执行壁球合并时将分支名称放入提交消息中。 – 2014-12-03 02:23:29
不幸的是,当我们进行壁球合并时,我们并不总是在提交消息中放置分支的名称。 – emilyxxie 2014-12-03 22:40:53
你正在通过挤压获得什么?你总是可以通过rebase先压缩然后进行正常的合并。 – 2014-12-03 23:04:06