【发布时间】:2016-04-22 15:53:25
【问题描述】:
我知道这个问题已经以类似的方式提出。但是,我正在寻找更严格的资格标准,即 .我只对
的分支感兴趣- 已合并到master
- 合并后没有进一步的提交 掌握
这是为了避免删除有一些进一步(可能有价值)工作但尚未合并到 master 的分支(通过可能的遗漏、放弃的拉取请求等)
【问题讨论】:
标签: git merge git-branch branching-and-merging
我知道这个问题已经以类似的方式提出。但是,我正在寻找更严格的资格标准,即 .我只对
的分支感兴趣这是为了避免删除有一些进一步(可能有价值)工作但尚未合并到 master 的分支(通过可能的遗漏、放弃的拉取请求等)
【问题讨论】:
标签: git merge git-branch branching-and-merging
简单得多,对于这种特殊情况(检查哪些远程跟踪分支已完全合并到master):
git branch -r --merged master
(当然还有--no-merged,对于那些可能仍需要处理它们的人,根据other answer 上的cmets)。
【讨论】:
这是建议的解决方案:
假设:假设最古老的祖先是 origin/master 。这是标准做法,但大声疾呼也无妨。
git branch -r --list --contains `git rev-list --max-parents=0 origin/master`| grep -v origin\/master | sed 's/^..\(.*\)/\1/' | xargs -I {} sh -c "echo -n {}' : '; git log --graph -n 1 {} | grep -c '^|[\]\ \ Merge'"
一步一步
输出报告如下所示。分支旁边的 1 表示它可以删除
origin/0.2016.02-release : 1
origin/0.2016.03-release : 1
origin/Fix-for-NPE-schedule-master : 0
origin/Fix-possible-infinite-loop-master : 0
origin/Fixing-unit-tests-master : 0
origin/NoBodyRequiredForActivity-master : 0
origin/Removing-not-needed-dependency-master : 0
origin/updateDevServiceConfig-master : 0
origin/updateServerPort-master : 0
origin/updatedPom : 1
希望这可以帮助任何寻找类似东西的人。欢迎任何建议和改进
【讨论】:
--max-parents=0),只需担心每个最尖端的提交。任何合并都会导致所有合并的提交都可以从该路径访问,并且根据定义,所有前任都可以从其后继者访问。 git branch 的 --merged 谓词(现在也可在 git for-each-ref 中使用)为您处理此问题,因此 git branch -r --merged master 为您提供列表。
git branch -r --merged master 不会区分在最新合并到 master 后有进一步提交的分支和没有的分支,这不是真的吗?这就是我感兴趣的问题。
--merged 表示“测试$theirs 的提示提交与$ours 的提示提交,$ours 和$theirs 的含义很明显,和由“是祖先”组成的测试(由git merge-base --is-ancestor执行的相同测试)。例如,假设origin/good指向提交X和origin/bad指向提交Y,其中X要么在master 的尖端后面,要么在master 的尖端,但Y 无法从master(的尖端)到达。--is-ancestor 测试通过X (X 是 master) 尖端的祖先,但对于 Y 失败。
origin/foo 的任何结果仍然有效。可能在您测试它和发送删除请求之间,其他人更新了origin/foo 以更改结果。我还没有测试过--force-with-lease 选项是否适用于--delete,但在执行这些删除操作时可能会使用这种方法。
git branch -r --list --no-merged master 列出我们需要管理其代码的分支。随意提供一个答案,我可以将其标记为已接受的答案。否则我可以编辑上面的答案。