配置
git config --global user.name "Your Name"
git config --global user.email "your email"
git config --global color.ui true
git config --global core.editor vim
# 为常用命令设置别名
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.br branch
查看差异
git diff # 工作区和暂存区比对差异
git diff HEAD # 工作区和版本库比对差异
git diff tag1:filename tag2:filename
分支操作
git branch -v # 显示分支信息并包含最后一次提交
git branch -a # 显示本地分支及远程分支
git branch -va
git branch -merged # 查看哪些分支已合并到当前分支
git ls-remote # 查看远程仓库中引用
git show-ref # 查看本地引用
git grep xxx # 相比于grep可以实现跨分支查找
远程分支
Remote branch 是对远程仓库状态的索引,是一些无法移动的本地分支,仅在Git网络活动时才更新
远程分支就像书签,提醒你上次连接远程仓库时上面各分支的位置。使用远程仓库名/分支名
表示一次
git clone
会建立本地master
分支和远程origin master
,它们都指向origin/master
分支的最后一次提交
# 推送至远程分支
git push {远程仓库名} {分支名}
# 抓取远程分支(仍无法本地编辑该远程仓库)
git fetch origin
即你不会有一个新的 serverfix 分支,有的只是一个无法移动的 origin/serverfix 指针
# 将远程仓库内容合并到当前分支
git merge origin/serverfix
# 得到一份自己的 serverfix
git checkout -b serverfix origin/serverfix
查看日志
git log --graph --oneline
git log -p # 显示具体内容
git log --name-only # 只显示更改的文件名
git reflog # 挽回错误的重置
git reset HEAD@{3}
git reflog show master # 显示某一分支指向的变迁
# pretty log
git log --graph --date=short --pretty=format:"\%x1b[31m\%h\%x09\%x1b[32m\%d\%x1b[0m\%x20\%ad \%s
git log --stat --abbrev-commit --pretty=short --graph
暂存区操作
git reset HEAD # 暂存区目录树被master分支指向的目录树替换,工作区不影响
git rm --cache {file} # 直接从暂存区删除,工作区不影响
git checkout .
git clean -fd
git add -A
git reset --filename # 仅将filename的修改撤销,git add filename反向操作
git rm # 删除动作加入到了暂存区,在提交后执行了删除
git checkout HEAD^ --hello.txt # 撤销删除动作
git mv hello.txt new.txt # 重命名操作
git reset HEAD # 撤销重命名操作
版本库导出
# 类似svn export
git archive --format zip --output /full/path/to/zipfile.zip master
Git Extras 工具介绍
Git-extras 是一套Git扩展工具集,提供了一些便捷实用的功能
安装
# alex-yh99 Fork:
$ git clone http://github.com/alex-yh99/git-extras.git
$ sudo make install
使用
对当前Project生成概要信息 git summary
project : git-extras
repo age : 10 months ago
commits : 163
active : 60 days
files : 93
authors :
97 Tj Holowaychuk 59.5%
37 Jonhnny Weslley 22.7%
8 Kenneth Reitz 4.9%
5 Aggelos Orfanakos 3.1%
3 Jonathan "Duke" Leto 1.8%
2 Gert Van Gool 1.2%
2 Domenico Rotiroti 1.2%
2 Devin Withers 1.2%
2 TJ Holowaychuk 1.2%
1 Nick Campbell 0.6%
1 Alex McHale 0.6%
1 Jason Young 0.6%
1 Jens K. Mueller 0.6%
1 Guillermo Rauch 0.6%
查看版本库一些活跃的修改 git-effort --above <above_num>
file commits active days
mongoose.c................................... 380 205
README.md.................................... 73 45
mongoose.h................................... 73 56
Makefile..................................... 65 50
main.c....................................... 55 42
test/unit_test.c............................. 44 37
test/test.pl................................. 42 37
UserManual.md................................ 27 15
examples/chat.c.............................. 16 13