看日记学git

《看日记学git》之二十二

在之前的讲解中,涉及过git branch删除分支时-D和-d的区别,但没有深入研究,感觉不解渴。

今天,就来分各种情况,好好研究研究-D和-d吧。(今天实验室组织去生存岛玩,很赞但很累。现在已经过了12点,凌晨坚持写完这篇博客… 困极了…)

前提要说清,我们有master主分支、wukong分支共两个分支。

情况一:wukong分支处于已commit状态。master也处于commit状态。然后在master主分支进行-D和-d,看看结果。

结论:

如果master分支执行了merge wukong操作,那么使用-d和-D是没有区别的。

如果master分支没有执行过merge wukong操作,且wukong做出了修改,也就是说master根本没有把wukong的工作吸纳进来,则使用-d会显示:

[rocrocket@wupengchong git22]$ git branch -d wukong
error: The branch ‘wukong’ is not an ancestor of your current HEAD.
If you are sure you want to delete it, run ‘git branch -D wukong’.

如果是用-D当然会成功删除这个分支:

[rocrocket@wupengchong git22]$ git branch -D wukong
Deleted branch wukong.
情况二:wukong分支处于未commit状态。然后在master主分支进行-D和-d,看看结果。

结论:

这种情况更为糟糕,因为当分支未commit时,你甚至是无法转移到master主分支的,瞧:

[rocrocket@wupengchong git23]$ git checkout master
error: Entry ‘roc.c’ not uptodate. Cannot merge.
无法切换到主分支,那么删除wukong分支也就无从谈起了。看来还是要老老实实的commit wukong分支阿。

情况三:wukong分支处于已commit状态。master处于未commit状态。然后在master主分支进行-D和-d,看看结果。

结论:

如果wukong进行了改进,那么在master分支使用-d来删除wukong分支时会失败:

[rocrocket@wupengchong git23]$ git branch -d wukong
error: The branch ‘wukong’ is not an ancestor of your current HEAD.
If you are sure you want to delete it, run ‘git branch -D wukong’.

如果wukong进行了改进,那么使用-D时会成功:

[rocrocket@wupengchong git23]$ git branch -D wukong
Deleted branch wukong.

看来-d其实对于master是没有要求的,只是对wukong分支有要求,即必须是commit的。

情况四:wukong分支处于未commit状态。master也处于未commit状态。然后在master主分支进行-D和-d,看看结果。

结论:

这个情况当然和情况二一样喽。

四种情况,涵盖了大部分-D和-d的情况。足够用了!

ps:这几天找工作,忙阿,投了google, 不过都杳无音信了,还有baidu,tencent,redhat, 继续努力吧 呵呵~

晚安了!

===
如果你对git感兴趣,请继续阅读:

《看日记学git》之二十三

《看日记学git》之二十四

《看日记学git》之二十五

over~

1条评论

  1. man git-branch里面简单地两句话就说清楚了其实。
    [quote]
    -d
    Delete a branch. The branch must be fully merged in HEAD.

    -D
    Delete a branch irrespective of its merged status.
    [/quote]

发表您的评论

请您放心,您的信息会被严格保密。必填项已标识 *