来自git branch
:的手册页
删除分支。分支必须在其上游分支中完全合并,如果没有使用--track或--set设置上游,则必须在HEAD中完全合并。
$ git branch -d skin
warning: deleting branch 'skin' that has been merged to
'refs/remotes/origin/skin', but not yet merged to HEAD.
Deleted branch skin (was 1f97b5b).
$ git remote -v
origin git@github.com:me/Banana.git (fetch)
origin git@github.com:me/Banana.git (push)
upstream git@github.com:others/Banana.git (fetch)
upstream git@github.com:others/Banana.git (push)
皮肤分支实际上被删除了(本地),但我试图理解警告消息的含义。请注意,正如预期的那样,皮肤分支在起源和上游仍然可用。
警告的意思正是:您要求git删除的分支名称不是HEAD
的祖先。无论您所在的分支是什么(例如,master
),skin
都会命名一个不属于该分支的提交。但是,名称skin
是一个跟踪分支名称,并且它命名了一个作为原始跟踪分支"一部分"的提交,所以git删除了分支标签。
用于指向提交1f97b5b
的分支标签。origin/skin
很可能也指向(或指向)1f97b5b
,即提交树看起来像这样:
A --- B --- C <-- HEAD, master, origin/master
D --- E <-- skin, origin/skin
其中提交E的SHA-1是CCD_ 9。但skin
可能是origin/skin
之后的一个或多个提交,因此1f97b5b
是提交D、B甚至a的ID。重要的是,从origin/skin
开始,可以沿着提交树向后工作并找到提交1f97b5b
,因此git认为删除指向提交1f97b5b
的标签是"安全的"。