[博主公告]

“linux大棚”是一个以Linux技术专题为主的博客。
本博客为了保证读者的浏览体验,决定不刊登任何广告信息。

专题

文章发布时间日历

September 2010
M T W T F S S
« Aug    
 12345
6789101112
13141516171819
20212223242526
27282930  
    <<返回主页

  • 05Oct
    %e3%80%8a%e7%9c%8b%e6%97%a5%e8%ae%b0%e5%ad%a6git%e3%80%8b%e4%b9%8b%e5%8d%81%e5%85%ab%e7%82%b9%e7%9d%9b

    这篇文章将总结之前文章的知识点,

    但并不会地毯式总结,简单的命令在这里不会重复,

    我们总结的将是疑难知识点。

    我提炼出来的需要解决的疑难问题包括:

    • 1 commit和commit -a的区别
    • 2 log -p的中-p的作用
    • 3 merge的用法及参数用法
    • 4 fetch的用法
    • 5 pull的用法
    • 6 commit信息详解
    • 7 HEAD的含义及相关用法,ORIG_HEAD的用法以及其他常量的使用方法
    • 8 tag的用法

    下面我们就一一总结上述问题。

    ===

    1

    commit和commit -a的区别

    commit -a相当于:

    第一步:自动地add所有改动的代码,使得所有的开发代码都列于index file中

    第二步:自动地删除那些在index file中但不在工作树中的文件

    第三步:执行commit命令来提交

    2

    log -p的中-p的作用

    git log:显示commit日志

    git log -p:不仅显示commit日志,而且同时显示每次commit的代码改变。

    3

    merge的用法及参数用法

    git-merge主要用于将两个或两个以上的开发分支进行合并。

    git merge branchname 用于将branchname分支合并到当前分支中。(如果合并发生冲突,需要自己解决冲突)

    当merge命令自身无法解决冲突的时候,它会将工作树置于一种特殊的状态,并且给用户提供冲突信息,以期用户可以自己解决这些问题。当然在这个时候,未发生冲突的代码已经被git merge登记在了index file里了。如果你这个时候使用git diff,显示出来的只是发生冲突的代码信息。

    在你解决了冲突之前,发生冲突的文件会一直在index file中被标记出来。这个时候,如果你使用git commit提交的话,git会提示:filename.txt needs merge

    在发生冲突的时候,如果你使用git status命令,那么会显示出发生冲突的具体信息。

    在你解决了冲突之后,你可以使用如下步骤来提交:

    第一步:git add filename.txt

    第二步:git commit

    如果你希望撤销一个分支到merge前的状态,那么使用如下命令:

    $ git reset –hard HEAD //–hard表示将working tree和index file都撤销到以前状态

    在这先偷偷的告诉你,–soft表示只撤销commit,而保留working tree和index file的信息,–mixed会撤销commit和index file,只保留working tree的信息。OK,如果你能记住–hard、–mixed和–soft的区别,那最好,如果记不住,也不用自责啦,以后还会讲到。

    4

    fetch的用法

    git-fetch用于从另一个reposoitory下载objects和refs。

    命令格式为:git fetch <options> <repository> <refspec>…

    其中<repository>表示远端的仓库路径。

    其中<refspec>的标准格式应该为<src>:<dst>,<src>表示源的分支,如果<dst>不为空,则表示本地的分支;如果为空,则使用当前分支。

    git fetch /home/bob/myrepo master:bobworks :用于从bob的工作目录的master分支下载objects和refs到本地的bobworks分支中。

    5

    pull的用法

    git-pull的作用就是从一个repository取出内容并合并到另一个repository中。

    git pull是git fetch和git merge命令的一个组合。

    git pull /home/bob/myrepo 这个命令的意思是从此目录中取出内容并合并到当前分支中。

    git pull .就相当于git merge。

    6

    commit信息详解

    你使用git log可以看到每一次commit的信息,大约如下格式:

    [rocrocket@wupengchong project]$ git log
    commit 5b888402aadd3cd41b3fe8c84a8658da07893b20
    Author: rocrocket <wupengchong@gmail.com>
    Date:   Wed Sep 24 13:16:46 2008 +0800

    after pull from rocrocket

    Hello!!!!!

    可以看到黑体部分为本次commit的ID号,你可以根据这个号码,使用git show来显示这次commit的更详细的信息,包括了提交时间、修改内容、git diff信息等等。

    7

    常量的使用方法

    HEAD:表示最近一次的commit。

    MERGE_HEAD:如果是merge产生的commit,那么它表示除HEAD之外的另一个父母分支。

    FETCH_HEAD:使用git-fetch获得的object和ref的信息都存储在这里,这些信息是为日后git-merge准备的。

    HEAD^:表示HEAD父母的信息

    HEAD^^:表示HEAD父母的父母的信息

    HEAD~4:表示HEAD上溯四代的信息

    HEAD^1:表示HEAD的第一个父母的信息

    HEAD^2:表示HEAD的第二个父母的信息

    COMMIT_EDITMSG:最后一次commit时的提交信息。

    8

    tag的用法

    主要作用是给某次commit起一个好记的名字:

    [rocrocket@wupengchong project]$ git tag V3 5b888 //以后可以用V3来代替复杂的名称(5b888…)

    [rocrocket@wupengchong project]$ git show V3

    ps:我敢肯定,读者一定还有很多迷惑之处,但是到目前为止,作为一个初级用户,你简单地使用git已经没有任何问题了。我们如果想继续提高,需要的是对基本命令的更加熟练使用,以及对git原理的了解和把握。

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

    《看日记学git》之十九

    《看日记学git》之二十

    《看日记学git》之二十一

    over~

    我猜您对这些文章感兴趣:

    Posted by rocrocket @ 3:32 pm

    Tags: , , ,

    4,185人阅读过了这篇文章。

    如果您还满意我的文章,请您订阅我的博客。点击“我要订阅”即可。谢谢:)

  • <<返回主页

5 Responses

WP_Cloudy

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.