git show-branch 详解

转载请标明出处:http://blog.csdn.net/xx326664162/article/details/49126557 文章出自:薛瑄的博客

你也可以查看我的其他同类文章,也会让你有一定的收货!

转载:http://roclinux.cn/?p=1022
git-show-branch这个命令。它和git branch不一样,后者的功能是列出当前所有的分支。

我们先来看看这两个命令的不同之处:

[rocrocket@wupengchong cloneteset]$ git show-branch
* [master] 1
 ! [wukong] 5
--
+ [wukong] 5
+ [wukong^] bajie
+ [wukong~2] 2
*+ [master] 1
[rocrocket@wupengchong cloneteset]$ git branch
* master
wukong
[rocrocket@wupengchong cloneteset]$

显而易见,git show-branch会输出很多很晦涩的东西。好,下面我们就通过一个实例来搞定这个晦涩的命令!
首先新建一个git仓库,如下:

[rocrocket@wupengchong showbranch]$ cat roc.c
int main()
{
printf("Firstly");
return 0;
}

[rocrocket@wupengchong showbranch]$ git branch
* master

[rocrocket@wupengchong showbranch]$ git show-branch
[master] Firstly

[rocrocket@wupengchong showbranch]$ git log
commit b11be45d63226eac8b89fa05119d4282cfd73df2
Author: rocrocket ;
Date:   Fri Nov 14 12:00:18 2008 +0800

Firstly

[rocrocket@wupengchong showbranch]$

可以看到,我只提交了一次commit,在git show-branch时会显示分支名称和其开发日志的内容。(我的第一个commit的开发日志就是一个单词”Firstly”)
之后,我们修改一下roc.c文件再提交一次,开发日志设定为”Secondly”:

[rocrocket@wupengchong showbranch]$ cat roc.c
int main()
{
printf("Firstly");
printf("Secondly");
return 0;
}

[rocrocket@wupengchong showbranch]$ git log
commit 5102e1a2c812dfa6539d77f1ecede46faaa26c4f
Author: rocrocket ;
Date:   Fri Nov 14 12:04:54 2008 +0800

Secondly

commit b11be45d63226eac8b89fa05119d4282cfd73df2
Author: rocrocket ;
Date:   Fri Nov 14 12:00:18 2008 +0800

Firstly

[rocrocket@wupengchong showbranch]$ git show-branch
[master] Secondly

[rocrocket@wupengchong showbranch]$

如上可见,此时git show-branch输出的是master分支第二次commit的开发日志,而第一次的”Firstly”并没有再出现了。
下面,我们新建一个分支,老规矩,叫做wukong:

[rocrocket@wupengchong showbranch]$ git branch wukong
[rocrocket@wupengchong showbranch]$ git branch
* master
wukong

[rocrocket@wupengchong showbranch]$ git show-branch
* [master] Secondly
 ! [wukong] Secondly
--
*+ [master] Secondly

[rocrocket@wupengchong showbranch]$ git checkout wukong
Switched to branch "wukong"

[rocrocket@wupengchong showbranch]$ git-show-branch
! [master] Secondly
 * [wukong] Secondly
--
+* [master] Secondly

[rocrocket@wupengchong showbranch]$

这时再git show-branch就出现了稍微复杂一点的输出。里面有*和!,还有–,这都是什么乱七八糟的阿?!

1、你会看到两次git-show-branch之后的!和* 调换了位置,对,这是因为我切换分支所造成的。所以可以断定!和*是和当前分支有关的。

  • (星号)代表HEAD所指的分支,
  • 而其他分支则会标识为!(叹号)。

这两个符号有些特别,你可能已经观察到了! 和 * 是有缩进区别的,这是因为!和* 不仅要标识本行是否为“当前分支”,而且还用来标识一列。

比如说,

  • !标识第一列,也就是说下面的输出中只要在第一列有符号的,都是在指示master分支的;
  • 而*在第二列,只要下面的输出中有符号的,都表示在指示wukong分支。

(OK,好好观察观察,自己做做实验,这个知识点不搞定,后面的内容可看不懂哦)

2、你会看到“- -”符号,这个符号只是一个分隔符,用于更清晰的区分各个列用的,没有什么特殊意义的。
“- -”符号上部内容主要用于显示分支列表,而“- -”下部的内容为分支commit的关系。

3、“- -”下部的内容
+(加号)表示所在分支包含此行所标识的commit
(空格)表示所在分支不包含此行所标识的commit
-(减号)表示所在分支是经过merge得到的,而所在行的内容即是merge的基本信息。
* (星号)表示如果需要在某列标识+(加号),且此列为当前分支所在列,那么则将+(加号)转变为*(星号)。

我们来分析一个例子:

[rocrocket@wupengchong showbranch]$ git-show-branch
* [master] merge
 ! [wukong] wukong:Thirdly
--
-  [master] merge
*+ [wukong] wukong:Thirdly

可以看到:
结论一:当前分支为master分支,而wukong分支并非当前分支。

结论二:master分支的HEAD所指向的commit的开发日志的首行为“merge”字符串,而wukong分支的HEAD所指commit的开发日志的首行信息为“wukong: Thirdly”

结论三:根据“-”符号可以知道,master分支的HEAD的最近一次commit是由merge得到的,且此次merge后commit的信息为“merge”字符串。你可能看到了在“-”后面还有一个空格,这说明当前行所指的这次commit对wukong分支(第二列)是没有影响的,所以用“空格”表示。

结论四:根据“*+”所在列可知,当前行的commit影响范围波及到了master分支和wukong分支,也就是说此次commit在两个分支都有效。这是为什么呢?很简单,这是merge的力量,这说明我在wukong分支的这一次commit(其开发日志的后行为“wukong: Thirdly”)被merge到了master分支。

ok~ 看懂这几段后,你基本上已经掌握了git-show-branch命令了!
最后给你一个例子,来分析分析,看看到底发生了什么:

[rocrocket@wupengchong showbranch]$ git-show-branch
! [bajie] shaseng:Secondly
 * [master] Fourth
  ! [shaseng] shaseng:Secondly
   ! [wukong] shaseng:Secondly
----
 -   [master] Fourth
+*++ [bajie] shaseng:Secondly
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页