《看日记学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