```git git branch --contains ```
git branch --contains 469bcec
有没有办法获取哪些提交没有进入特定分支?
例如,有没有办法检查哪些提交尚未进入Master分支?
谢谢
git branch --contains 469bcec
有没有办法获取哪些提交没有进入特定分支?
例如,有没有办法检查哪些提交尚未进入Master分支?
谢谢
git log --pretty=oneline --all --not master
git fsck
的工作原理),但您不希望这样做,因为它会找到“临时,非分支”的提交,例如在refs/stash
及其reflog中的提交。
不清楚您是否希望包含或排除通过refs/remotes/
命名的提交,例如(“远程分支”),还是那些通过标签命名的提交。然而,总体上,做法是以talles' answer为起点,该答案使用了..
语法:EXC..INC
与INC --not EXC
意思相同,即从“包含”点INC
开始可达的所有提交,减去从“排除”点EXC
开始的所有提交。如果devel
是包含点,master
是排除点,则这是一个列出的提交“在devel
上”,但不是“在master
上”。 (您可以省略任一侧以表示“使用HEAD
”,因此..master
表示“包含HEAD
,排除master
”,这意味着“在此分支上的所有提交都不在master
上”)。
git log featureA featureB --not master
这将获取两个特性分支上不在master
中的所有内容。
如果您想要“本地分支”,则有一种直接的方法:git rev-list
有一个--branches
参数。使用--branches
表示“所有本地分支”。您可以添加=pattern
以仅选择与某些shell样式模式匹配的分支,例如--branches='feature*'
以选择分支featureA
、featureB
等,但不包括分支devel
。
将它们提供给任何使用git rev-list
的命令,包括git log
:
$ git log --oneline --graph --decorate --branches --not master
git rev-list
参数,以及--glob
,它允许您访问完整的引用名称空间。提供--all
(如twalberg's answer中所示)意味着与--glob=*
相同,即包括refs
名称空间中的每个引用,其中包括refs/stash
,这不总是您想要的。^master
来拼写--not master
。这与使用--not
略有不同:--not
翻转适用于所有后续名称的布尔标志,而前导的^
仅适用于其一个项目;因此,--not rel1 rel2
“意味着”与^rel1 ^rel2
相同。请注意,^commit
与commit^
非常不同。啊,Git。 :-) )我不确定你能否在一个命令中对所有分支进行操作(无需编写脚本),但是对于特定的分支,你可以这样做:
git log master..mybranch
这将列出在mybranch
上存在但不在master
上的所有修订。
您还可以在同一命令中使用多个分支:
git log master..mybranch1 master..mybranch2
为了简单起见,您还可以添加--oneline
选项,并省略当前所在的分支(假设您当前位于主分支):
git log ..mybranch1 ..mybranch2 --oneline
另一种方法:Git 1.9/2.0(2014年第一季度)将包括一个新的--exclude
选项,其中包含commit 10167eb:
人们经常希望有一种方法告诉“
git log --branches
”(和“git log --remotes --not --branches
”)从“--branches
”扩展中排除一些本地分支(类似于“--tags
”,“--all
”和“--glob=<pattern>
”)。
现在他们有了这个选项。
git rev-parse和git rev-list现在提到:
--exclude=<glob-pattern>::
diff <(git branch) <(git branch --contains eb87aa6c)
。这不完全是您要找的,但可以作为解决方案的一部分。 - Eric Tjossem