初级技能

  1. install

  2. configure

config for a user.

git config –global user.name “name”

git config –global user.email “name@mail-server.com”

~/.gitconfig

config for a project

git config user.name “name”

$PROJ_DIR/.git/config

  1. get a repo

git 支持ssh, http(s), git协议,有时候防火墙只允许http(s)协议通过,那么这时只能使用http(s)协议,通常可以clone一个已有的git repo。也可以新建一个git repo

$cd project

$git init

$git add .

$git status

$git diff

$git commit -a

提交所有修改过的文件,但是新文件不会被提交,需要使用git add file添加,如果不是用git commit -a,那么要提交更改的文件,首先要使用git status来查看modified的文件,然后git add file, git commit。

一个写comments的小技巧,第一行为短描述,然后空一行,下面再写详细描述,这样git可以方便的将其格式化为email发送。

  1. git branch

git可以方便的管理多个分支,通常项目都有一个stable分支,然后有一个devel分支,然后将devel分支合并到stable分支中。

$git branch devel

从当前分支中新建一个分支devel

$git branch

显示所有分支

$git checkout devel

切换到devel分支

然后,做一些修改,然后切换回master分支

$git checkout master

可以发现master分支并没有改变,然后合并devel分支

$git merge devel

现在devel中已经有新的提交,那么可以合并它到master中,记得首先切换到master分支,如果有冲突,在冲突文件中会有标记,修改这些冲突后再使用git commit -a来提交。

$git -d devel

删除已经合并了的分支devel

$git -D devel

即使devel没有合并也可以删除

$git log

[-p] 显示patch

[–color] 彩色模式

[–stat] 统计

[–pretty=…] 格式化显示格式

[–short] 短格式

[–graph] 文本图形显示,查看分支之间的状况很有用

[–reverse] 逆向显示日志

[–topo-order] 拓扑结构来显示,可以看清各个提交和分支

  1. git diff

$git diff [–cached]

–cached参数只显示将要被提交的改变

$git diff branch1..branch2

比较两个分支

$git diff HEAD

比较当前工作目录和上次提交(HEAD)

$git diff file

比较file在当前工作目录和上次提交

[–stat] 统计数据

  1. git pull

$git pull repo_url branch_name

默认的branch_name是master,这会将远程的repo拉过来并且和当前分支合并。

远程工作时,可以添加别名

$git remote add alias_name repo_url

$git fetch alias_name

fetch命令只会拉下来更新,而不会执行merge工作

$git merge alias_name/branch_name

  1. git tag

git tag用来为某个提交创建一个轻量级标签

$git tag stable-1 1b2e3f

如果想为标签添加注释,那么需要创建一个标签对象。创建标签对象后,一个对象就会被添加到git对象库中,然后标签指向这个对象

$git tag [-a -s -u] stable-1 1b2e3f

签名的标签

git config user.signingkey