好吧,@Hasturkun 的评论说实话,但你有 3 个问题:
1.它是否检查一个分支中的所有提交是否已经存在于原始父分支中?
不要试图重复@Hasturkun 引用说:“仅列出无法从指定提交获得提示的分支”。
在这种特定情况下,将提交的 git 树视为管/地下图。您只能从一个节点/站向后移动到另一个节点/站。
master : - - - -0
\
branchA : E - - - - F - - - - G
如果master
您运行git branch --no-merge
并使用手册页定义?你branchA
能从master
的 HEAD 到达 G(的尖端),提交 0 吗?不,您不能,因此branchA
将被列为非合并分支。
如果你从(commit G)git branch --no-merge
的 HEAD运行呢?branchA
将master
是一个非合并的分支?不,它被认为是一个合并的分支,理解为什么之前给出的例子是微不足道的。
这个例子怎么样?
master : - - - -0
\
branchA : E - - - - F - - - - G - - - Z
\ /
branchB : Y - - - W - - -
在所有 3 个分支中运行 git branch --no-merged 的输出:
master
branchA
branchB
branchA (nothing)
branchB (nothing)
2. 樱桃采摘呢?说来自 1 个分支的提交已经被樱桃挑选回原始父分支是否足够聪明?
Cherry-picks 创建了一个完全不同的 commitId,所以我只在真正需要时才使用它们。由于它创建了一个完全不同的提交,因此树会有所不同:
看一下我刚刚做的这个实验,把master和branchA认为是一样的:
经验1)使用merge
(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. 如果一个分支已经被合并并添加了新的提交,它会选择那个没有被合并的分支吗?
是的,因为以上所述。