程序人生 A log of my life

Git笔记

一图胜千言

获取

git clone git@github.com:liuzhongshu/liuzhongshu.github.com.git

初始化远程仓库

这是很常见的操作,比如在github上已经创建了一个仓库,要将本地的目录上传上去,如果本地目录还不是库,先做以下操作

cd <localdir>
git init
编辑好.gitignore文件
git add .
git commit -m 'message'

然后将远端地址加上并同步,origin只是一个标签,可以任意取,-u会把这个信息记住,下次只需要git push就可以了。

git remote add origin <url>
git push -u origin master

url通常有两种,一种是https格式,一种是ssh格式,ssh格式需要事先在服务器端配置好ssh key,好处是以后都不需要输入账号密码了。

本地操作

  • 添加所有修改,包括删除的文件git add . -A
  • 查看修改情况git status
  • 提交到本地git commit -m "comment"
  • 取消,下面两条都可以,暂存区域会取消,–hard会将修改的文件恢复到上次commit状态。
git reset
git reset --hard
  • 比较,下面三条依次用最新版本,上次版本,上上次版本和本地进行比较
git diff 
git diff HEAD~
git diff HEAD~2

更高级一点的用法,调用外部工具比较一个特定版本(用hash)的修改:

git difftool c1ac~ c1ac

撤销

和svn不一样,git里本地的commit,如果没有push,是可以撤销的,方法很简单,比如撤销最后三次修改

git reset --soft HEAD~3
git commit -m 'comment'

Rebase

GUI工具

diff和merge工具

git可以配置调用外部diff工具,通常我习惯用beyond compare,可以在~/.gitconfig下增加以下配置

[diff]
    tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = bc3
[mergetool]
    prompt = false
    keepBackup = false
[mergetool "bc3"]
    cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
    trustExitCode = true

其它

在使用github时每次都输入密码是很麻烦的事,可以设置git config credential.helper store之后就可以缓存账号密码了。