git branch -r --no-merged
如何运作?
是否检查原始父分支中是否已存在一个分支中的所有提交?
那樱桃酱呢?是否足够聪明地说1分支的提交已经被挑回原始的父分支?
如果已经合并了一个分支并且添加了新的提交,那么它会选择该分支而不是合并吗?
答案 0 :(得分:10)
嗯,来自@Hasturkun的评论说实话,但你有3个问题:
<强> 1。是否检查原始父分支中是否已存在一个分支中的所有提交?
不试图重复@Hasturkun引用说:“只列出其提示无法从指定提交到达的分支”。
在这种特定情况下,将提交的git树视为管/地下地图。您只能从一个节点/站向后旅行。
master : - - - -0
\
branchA : E - - - - F - - - - G
如果在master
上运行git branch --no-merge
并进行手动页面定义?你可以从branchA
的头部到达G(master
的尖端),提交0吗?不,你不能,所以branchA
将被列为非合并分支。
如果从git branch --no-merge
(提交G)的HEAD运行branchA
怎么样? master
是否会成为非合并分支?不,它被认为是一个合并的分支,很容易理解为什么给出前面的例子。
这个例子怎么样?
master : - - - -0
\
branchA : E - - - - F - - - - G - - - Z
\ /
branchB : Y - - - W - - -
在所有3个分支中运行git分支的输出--no-merged:
master
branchA
branchB
branchA (nothing)
branchB (nothing)
<强> 2。樱桃采摘怎么样?它是否足够聪明,可以说1分支的提交已被挑回原始的父分支?
Cherry-picks创建了一个完全不同的commitId,因此我只在必要时才使用它们。由于它会创建一个完全不同的提交,因此树会有所不同:
看看我刚才做的这个实验,考虑一下master和branchA:
经验1)使用合并
(master)$ touch empty && git add . && git commit -am "File Added"
(master)$ checkout branchA
(branchA)$ git branch --no-merged
master
(branchA)$ git merge master
(branchA)$ git branch --no-merged
// outputs nothing
经验2)使用cherry-pick
(master)$ touch empty && git add . && git commit -am "File Added"
(master)$ checkout branchA
(branchA)$ git branch --no-merged
master
(branchA)$ git cheery-pick <commitID from above>
(branchA)$ git branch --no-merged
master
第3。如果一个分支已经合并并且已经添加了新的提交,那么它会选择该分支而不是合并吗?
是的,因为上述所有内容。