本文共 2168 字,大约阅读时间需要 7 分钟。
1.基本操作
$git init #初始化一个代码库
$git add . #将改动的东西加到index中,.指当前目录及子目录,也可用具体的文件名代替
$git commit #代码的commit
$git commit -m "我的log" 代码的commit
一般这几条命令就行,当然git add . 和git commit 可以用git commit -a一条命令来代替,但是后者不能将新添加的文件也commit了。
$git log #查看更新的log,若是想要更详细的更新log,可以加 -p参数
2.branch
$git branch branch_name#创建一个分支
$git checkout branch_name#切换到指定的分支去
$git branch -b branch_name #创建分支,并切换到分支中去
$git branch #查看所有的分支,当前的分支前,会有一个*标示
$git branch -d branch_name#删除名为branch_name的分支
$git watchchanged -p branch1..branch2 #查看两个分支的差分
分支还是个很好用的东西的,以前在用SVN时,因为创建分支,就相当于创建一个文件夹,感觉不好用,所以,没怎么用过分支。但是在GIT中,在进行代码merge了,打patch时,分支还是必不可少的。
3.tag
SVN,每次代码的commit,都对应着一个全局的版本号。GIT不是这样子的,它会生成一个唯一的SHA1号码来标示每次的更新。但是,对于我们来说,可读性就太差了。而且,有时还想对某些重大的release点,进行一些特殊的标记。tag的用途来了
$git tag tag_name sha1_num#为id为sha1_num的commit加一个叫tag_name的tag
$git tag #查看当前的代码库中,所有的tag
$git tag -d tag_name#删除名为tag_name的tag
4.patch
协同开发时,git pull或git push是不错的选择,但是patch也是必不可少的。
4.1 生成patch
4.1.1 如果当前有两个branch,分别名为base和working。base是队友们手头最新的代码,working是自己更新过的代码。
base
*working
这时候,可以通过git diff来生成patch,发给队友们
$git checkout working#切换到working分支
$git diff base > update.patch#生成相对于base的patch
上述命令是通过重定向,将diff的结果写入了update.patch中。该方法不能保持历次改动的log
4.1.2 当然,也可以用下述命令
$git format-patch start_sha1..end_sha1 #按顺序,根据版本从start_sha1升级到end_sha1的历次改动,生成一系列的patch
4.2 打patch
4.2.1 对应上述两种方法生成的patch,都可以用下面这条命令将patch打上
$git apply patch_name#这地方如果是好多的patch,用git apply *.patch也是可行的
$git add .
$git commit -m "log"#别忘了commit
4.2.2 对应于4.1.2生成的patch,可以用下述命令来打patch
$git am *.patch #会依次将生成的n多patch给打上,然后自动commit
当然,如果打patch失败了,想再次用这条命令打patch前,不许得运行下述命令,否则,会报错
$git am --abort
这样子打的patch,会保留历次commit的log信息
5.进行了错误的commit怎么办
在GIT中,是有后悔药的。如果进行了错误的commit,比如,本来版本为sha1_a,我上传了代码后,升级代码为sha1_b。但是我突然发现,我这次上传的代码有个很严重的问题,我得重新斟酌斟酌。怎么办?可是通过下述的命令,将覆水收回去。
$git reset -hard sha1_a
现在世界又恢复为我更新前的样子了。
6.想查找一下命令怎么用
好方法是,上网查啊。不过,现在网上大部分文章可能都是某些人到处copy,查来查去,没准就那么几篇,搞不好,还不是自己想要的,这时候怎么办?
遇到问题,找”男人”啊。
$man git-command
查看command的手册。这地方会把命令的参数都列出来,虽说解释的不是很多,但是一般都够用了。
比如,我想看git reset命令都能怎么用,我可以
$man git-reset
“男人”就会告诉你怎么办了。你会发现这条命令出了hard参数,还有好几个参数,表示不同的含义。
7.查看当前index中的文件
$git ls-files --staged
8.从远程取一个分支,到本地的某个分支上
$git pull path/to/remote/repo remote_branch_name:local_branch_name
转载地址:http://mphai.baihongyu.com/