《看日记学git》之十八

时间:2012-2-18     作者:smarteng     分类: 服务器相关


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

  • 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原理的了解和把握.

原文: http://roclinux.cn/?p=509