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

时间:2013-10-16 15:06:17

标签: git

git branch -r --no-merged如何运作?

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

那樱桃酱呢?是否足够聪明地说1分支的提交已经被挑回原始的父分支?

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

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。如果一个分支已经合并并且已经添加了新的提交,那么它会选择该分支而不是合并吗?

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