Git 基本技能
初级技能
-
install
-
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
- 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发送。
- 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] 拓扑结构来显示,可以看清各个提交和分支
- git diff
$git diff [–cached]
–cached参数只显示将要被提交的改变
$git diff branch1..branch2
比较两个分支
$git diff HEAD
比较当前工作目录和上次提交(HEAD)
$git diff file
比较file在当前工作目录和上次提交
[–stat] 统计数据
- 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
- git tag
git tag用来为某个提交创建一个轻量级标签
$git tag stable-1 1b2e3f
如果想为标签添加注释,那么需要创建一个标签对象。创建标签对象后,一个对象就会被添加到git对象库中,然后标签指向这个对象
$git tag [-a | -s | -u] stable-1 1b2e3f |
签名的标签
git config user.signingkey