特别注意

git clone时, 尽量用ssh不要用https, 因为https一堆坑爹, 马蛋.

每天都要用

gcb = git checkout -b

不在主线修改, 不能在主线上开发

gcb #缩写, 以当前分支为基础创建新的分支, 并且切换过去.
git checkout -b #本尊
gco #如果是已有分支, 那么需要gco.
gcm #checkout master分支.
gcd #checkout develop分支.

#如果在错误的线上开发了, 咋办?   
gsta "hellokitty" #git stash save 存一个名为hellokitty的栈
git stash #存入栈 
gb #git branch 查看一下有哪些分支.
git branch dev #这个不是切换分支, 这个是创建分支dev
gco dev #切换到dev分支.

gstl #简写, 查看stash栈的列表
git stash list #本尊.

gstp #简写, 出栈
git stash pop #本尊.
#出栈之后就可以正常提交了.

#如果在错误的分支上add了信息, 咋办? 
#系统提示: (use "git reset HEAD <file>..." to unstage)
grh filename #缩写git reset HEAD readme.md 

#问题来了
gcd #git checkout develop 切换到develop分支
gb develop #这个和上面一个有区别吗? 有的, 这个是创建了develop分支.

#另外还有这些命令
gstaa #简写, 读取栈顶, 但是, 并没有出栈, 货还在栈里面. 持续运行这个命令, 持续的可以读到栈顶的内容. 
git stash apply #本尊
gstd # 貌似是干掉顶部.
git stash drop
gstc # 清栈
git stash clear
gsts # show一堆东西
git stash show --text
gru # 缩写: 
git reset --
grhh #缩写:
git reset HEAD --hard

gaa = git add

#提交之前要看状态
gst #缩写
gss #缩略展示
git status #原始命令

#add之前查看到底都改了啥
gd
git diff #原始命令
gdw #缩写, 下面是本尊, 这个命令更合理.
git diff --word-diff #详细展示一行中的修改

gco -- filename #缩写
git checkout -- application/views/campaign/index.html #放弃对这个文件的修改.

#提交修改
gaa #缩写, 并且是更为彻底的添加.
git add . #原始命令 不含删除
git add -A #原始命令 真正对应

gcam = git commit

commit之前查看缓冲区的差异

gdca #查看已缓存的改动
git diff --cached  # 这是原始命令
git diff --staged #和上面一样的结果.
gd HEAD -- 2016-06-19-关于折腾字体.md #这个也行, 缩写
git diff HEAD -- readme.txt #本尊


gdt #缩写, 下面是本尊 #gitdiff系列的所有快捷键都值得试一试
git diff-tree --no-commit-id --name-only -r


#如果提交错了
gc! # git commit -v --amend
git commit --amend #可以对上一次的提交做修改
gca! # git commit -v -a --amend

只是本地进行了commit,并且没有进行新的commit,只需要
git commit --amend;
如果进行了新的commit,只需要
git reset --soft xxx (xxx有问题那次提交的commit id),然后在进行
git commit就行,不过所有后面的提交都成为了一次提交;如果想保持每次提交独立的话,使用

git checkout -b tmp ^xxx
git cherry-pick xxx
git commit --amend
git cherry-pick <依次后面的提交id>
xxx还是有问题那次提交的commit id,单独建立tmp分支修改说明,然后将后面的提交一个一个的cherry-pick到新分支,然后删除掉旧的分支就可以了

gp = git push

push之前看看到底都改了啥?
比如这种情况: Your branch is ahead of ‘origin/dev’ by 2 commits.
我就想看看这两个commit是啥.

gf #git fetch是前置条件
###########################################################
#这个不对, 比较出来的不知道都是啥. 
#神奇了, 测试了一下, 发现是对的.
gd
git diff master origin/master #比较本地分支和远程分支之间的差异
git diff HEAD...origin/master #远程分支已经修改,本地未同步的变更
git diff origin/master...HEAD #本地分支已经修改,远程未同步的变更

#远程操作
gf #缩写, 下面是本尊
git fetch
grb #缩写, 下面是本尊
git rebase
gp #缩写, 下面是本尊
git push #, 分支控制之后, 只能现在dev分支提交, 再去网站pull request了.
# 设置默认的提交远程源.
gp -u <remote_name> <local_branch_name>

grb = git rebase

所有的merge都可以换成rebase

grb dev #把dev分支的内容合并回来.
grb #默认是去远程origin的对应分支.
git rebase
grba
git rebase --abort
grbc
git rebase --continue
grbi
git rebase -i
grbm
git rebase master
grbs
git rebase --skip

gk & gke = 图形界面

可以替代git log的很多作用.

gk #
\gitk --all --branches
gke #
\gitk --all $(git log -g --pretty = format:%h)

不是那么常用的命令

gra #缩写, 下面是本尊
git remote add
git init #初始化一个git目录.
#远程覆盖本地, 这个在服务器有用.
git fetch --all
git reset --hard origin/master
#不要每次都输入密码, 也是在服务器用.
git config --global credential.helper cache #linux
git config --global credential.helper osxkeychain #mac
#清掉没有跟踪的文件
gclean #git clean -df 清除文件和目录.
#解除某些文件的跟踪状态
git rm --cached readme.md
git branch -d dev  # 删除dev分支
gb -d dev # 缩写
git config --global color.ui true # Git显示颜色,会让命令输出看起来更醒目

echo "*.txt" > .gitignore #忽略txt文件   这个是替换.gitignore文件, 要找个办法是添加.gitignore.
echo '*.log' >> .gitignore #忽略文件里面添加一行

查看状态

gst #git status
gss #git status

gb #缩写
git branch
gba #缩写 = gb + gbr
git branch -a #所有的分支, 包括远程的.
gbr #缩写
git branch --remote

####下面两个不知道啥意思.
gbda  //貌似这个删除了除master之外的分支. 是一次merge并删除.
gbnm

gbl filename #缩写: git blame -b -w
git blame #查看每一行都是谁改的.

grv #git remote -v
git remote -v
gr show #缩写
git remote show #本尊

###################################################################
###参考上面的glg段落.

glo  #简洁显示, 没有作者.
git log --oneline --decorate --color  

glog #和glo没啥区别.
git log --oneline --decorate --color --graph  

glol #彩色log模式1, 时间, 作者都有显示.
git log --graph --pretty = format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit  

glola  #彩色log模式2, 显示更完整, 尤其是有分支merge的情况.
git log --graph --pretty = format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all  

gcount #缩写 按作者统计log.
git shortlog -sn #本尊

glp  #_git_log_prettily
git log --pretty=oneline 文件名
git log --graph --pretty=oneline --abbrev-commit #查看 分支的合并情况
##################################################################################
gsts # show一堆东西, stash栈里面的所有东西.
git stash show --text
gstl #简写, 查看stash栈的列表
git stash list #本尊.

git tag # 查看标签列表

不要用的命令

git merge
git pull
但是文件整体操作, add, delete, rename这三个操作, 必须快速提交.

参考:

git help everyday
http://www.jianshu.com/p/adbaa9f56f5d
http://progit.org/book/zh/ch2-3.html
http://www.binkery.com/archives/203.html

没有啥卵用的命令

glgg  #没卵用
git log --graph --color  
glgga  #卵没用
git log --graph --decorate --all  
glgm  #没啥用
git log --graph --max-count = 10