git --no-merged选项如何工作

Dar*_*Var 8 git

请问该怎么git branch -r --no-merged工作的?

它是否检查原始父分支中是否已存在一个分支中的所有提交?

樱桃采摘怎么样?是否足够聪明地说,1分支的提交已经被挑回原始的父分支?

如果已经合并了一个分支并且添加了新的提交,那么它会选择该分支作为未合并的分支吗?

bit*_*oiu 11

嗯,来自@Hasturkun的评论说实话,但你有3个问题:

1.它是否检查原始父分支中是否已存在一个分支中的所有提交?

不要试图重复@Hasturkun引用说:"只列出其提示无法从指定提交到达的分支".

在这种特定情况下,将提交的git树视为管/地下地图.您只能从一个节点/站向后移动到另一个节点/站.

master    : - - - -0 
                    \   
branchA   :          E - - - - F - - - - G
Run Code Online (Sandbox Code Playgroud)

如果master你在运行git branch --no-merge并采取手册页定义?你可以branchAmaster's HEAD 到达G(尖端),提交0吗?不,你不能,所以branchA将被列为非合并分支.

如果你git branch --no-mergebranchA(提交G)的HEAD 运行怎么样?将master是一个非合并的分支?不,它被认为是一个合并的分支,很容易理解为什么给出前面的例子.

这个例子怎么样?

master    : - - - -0
                    \   
branchA   :          E - - - - F - - - - G - - - Z
                               \                /
branchB   :                     Y - - - W - - -
Run Code Online (Sandbox Code Playgroud)

运行git分支的输出 - 在所有3个分支中未合并:

master
  branchA
  branchB
branchA (nothing)
branchB (nothing)
Run Code Online (Sandbox Code Playgroud)

樱桃采摘怎么样?是否足够聪明地说,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
Run Code Online (Sandbox Code Playgroud)

经验2)使用樱桃挑选

(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
Run Code Online (Sandbox Code Playgroud)

3.如果已经合并了一个分支并且添加了新的提交,那么它会选择该分支作为未合并的分支吗?

是的,因为上述所有内容.