Git

配置 Git

$ git config --system user.name	'Jian Li'   # `/etc/gitconfig'
$ git config --global user.name	'Jian Li'   # `~/.gitconfig'
$ git config user.name 'Jian Li'            # `.git/config'

Git diff

$ git diff              # 未暂存的更新
$ git diff --staged     # 未提交的更新
$ git diff --check      # 检查多余的空白字符
$ git diff <commit> <commit> [--] [<path>...] # diff 两个分支的同一个文件

Git log

$ git log -1 --stat                 # 获取最近一次提交列出更改的文件
$ git log -p -2                     # 获取近两次提交并展示差异
$ git log -p --word-diff            # 获取单词层面的差异对比
$ git log --pretty=oneline          # 单行模式
$ git log --pretty=format:"%h %s"   # 定制显示选项
$ git log --graph                   # 显示分支合并历史
$ git log --grep='tweak'            # 搜索提交说明
$ git log --author="Jian Li" --commiter="Not Me" --all-match
$ git log --since="2014-08-28" -- <path>
$ git log -- <path>                 # commit logs
$ git log -p -- <path>              # commit diffs
$ git log --follow -p  -- <path>    # follow RENAME

Git tag

$ git tag 0.1.0     # new tag
$ git tag           # list tags
$ git push --tags   # push tags

撤销操作

修改上一次的提交说明:

$ git commit --amend

如果上次提交时忘了暂存某些修改,可以先补上暂存操作,然后再--amend提交,这样不会产生新的提交:

$ git add forgotten_file
$ git commit --amend

取消已经暂存的文件:

$ git reset HEAD <file>

取消对文件做出的修改:

$ git checkout -- <file> 

Git别名

$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
$ git config --global alias.unstage 'reset HEAD --'
$ git config --global alias.last 'log -1 HEAD'
$ git config --global alias.visual "!gitk"

集成已有仓库代码

$ git remote add origin <>
$ git fetch origin master
$ git merge origin/master --allow-unrelated-histories

Remove sensitive datagithub

$ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch _wiki/proxy.mkd' --prune-empty --tag-name-filter cat -- --all
$ git push origin --force --all
$ git push origin --force --tags

$ git add .
$ git commit -m 'add file back'
$ git push