===================================================================== diff =====================================================================
git diff --check 检查多余空白
git diff --cache --check 检查多余空白
===================================================================== log =====================================================================
git log --no-merges 不显示merge的log
git log --no-merges branch1...branch2 显示在branch2但不在branch1中的提交信息
$ git log --abbrev-commit --pretty=oneline 显示SHA-1号简短唯一
ca82a6d changed the version number
085bb3b removed unnecessary test code
a11bef0 first commit
git log --oneline --decorate --graph --all like gitk --all
$ git log -g master 查看类似于 git log 输出格式的引用日志信息 commit 734713bc047d87bf7eac9674765ae793478c50d3 Reflog: master@{0} (Scott Chacon <schacon@gmail.com>) Reflog message: commit: fixed refs handling, added gc auto, updated Author: Scott Chacon <schacon@gmail.com> Date: Fri Jan 2 18:32:33 2009 -0800 fixed refs handling, added gc auto, updated tests
git log master..experiment 查看在experiment分支中的提交,且该提交不在master分支中
git log origin/master..HEAD 查看当前分支中不在远程中的提交。 在..的两边中,如果有一边为空,则默认为HEAD
$ git log refA..refB 三条命令等价 $ git log ^refA refB $ git log refB --not refA
$
git log refA refB ^refC$
git log refA refB --not refC 所有被refA
或refB
包含的但是不被refC
包含的提交
git log master...experiment 查看两个分支中非共同的提交-->等价于执行git log master..experiment的结果加上再执行git log experiment..master的结果
git log --left-right master...experiment 同上,但显示出提交属于哪个分支
git show --name-only 3c0d42bd33f9bd1da50e858d6a7f52f6b35707b6 显示这次commit影响的文件名
====================================================================== reflog ====================================================================
$ git reflog 引用日志只存在于本地仓库,一个记录你在你自己的仓库里做过什么的日志。 其他人拷贝的仓库里的引用日志不会和你的相同;而你新克隆一个仓库的时候,引用日志是空的,因为你在仓库里还没有操作。 734713b HEAD@{0}: commit: fixed refs handling, added gc auto, updated d921970 HEAD@{1}: merge phedders/rdocs: Merge made by recursive.
====================================================================== show ====================================================================
$ git show HEAD@{5} $ git show master@{yesterday} 显示昨天该分支的顶端指向了哪个提交。 这个方法只对还在你引用日志里的数据有用
$ git show HEAD@{2.months.ago}
$ git show d921970^ $ git show d921970^2 第二父提交
$
git show HEAD~3 第三父提交
$
git show HEAD^^^
==================================================================== rev-parse ======================================================================
$ git rev-parse topic1 查看分支的SHA-1值
ca82a6dff817ec66f44342007202690a93763949
==================================================================== branch ======================================================================
$ git branch 本地branch * master $ git branch -r 远程branch origin/master $ git branch -a 所有branch * master remotes/origin/master
$ git branch -v * master a00daa0 [ahead 2] add servlet-api.jar in libs $ git branch -vv 显示跟踪关系 * master a00daa0 [origin/master: ahead 2] add servlet-api.jar in libs
git branch --ser-upstream [local branch] [remote branch]
================================================================= add =========================================================================
git add -i 交互式暂存
git add -p 暂存部分补丁,等价于 git add --patch
================================================================= stash ==========================================================================
git stash or git stash save
git stash list
git stash apply ==> git stash apply stash@{0}
git stash apply stash@{1}
git stash apply --index 如果在stash之前有staged,使用改命令后仍是staged,否则是changed且未在staged中
git stash pop ==> git stash apply stash@{0} + git stash drop stash@{0}
git stash pop --index
git stash drop ==> git stash drop stash@{0}
git stash drop stash@{1}
git stash --keep-index 只储存staged的
git stash -u or git stash --include-untracked 也储存未跟踪的文件
git stash --patch 只储存某一部分
git stash branch [new branch] ==> git checkout -b [new branch] + git stash pop
git stash --all 移除未被追踪的文件, 并存放在栈中
================================================================ clean ==========================================================================
git clean 移除未跟踪的文件
git clean -d 移除未跟踪的目录,包括该目录中的文件
git clean -f 强制移除
git clean -n -n用来做一次演习然后告诉你 将要 移除什么
git clean -i 交互模式
git clean -x git clean
命令只会移除没有忽略的未跟踪文件,任何与 .gitiignore
或其他忽略文件中的模式匹配的文件都不会被移除。 如果你也想要移除那些文件,可以给 clean 命令增加一个 -x
选项
=============================================================== checkout ==========================================================================
git checkout --conflict=merge [conflict file] 回到[conflict file]未解决冲突时的状态
git checkout -b [new branch] [old branch]
================================================================ revert ==========================================================================
git revert -m 1 HEAD -m 选择返回到哪个分支的状态,1表示merge时的当前分支,2表示要merge的分支。revert表示弃用未选中分支(当前命令表示选中了1,未选中2)的内容。
git revert [SAH-1] 为了在重新合并中不弃用未选中分支内容,需要再次翻转
================================================================ blame ==========================================================================
git blame [file] 标注文件,查看这个文件每一行的最后修改时间以及修改作者
git blame -L 5,15 [file] -L 用于限制查看哪些行
git blame -C -L 5,15 [file] -C 用于查看各行的原始出处
================================================================ bisect ==========================================================================
$ git bisect start
$ git bisect bad
$ git bisect good [good version]
...
$ git bisect reset
$ git bisect start [bad version] [good version]
================================================================ bare ==========================================================================
git init --bare
git clone --bare [a repo] [a remote repo you want to create(named .git at the end)]
================================================================ remote ==========================================================================
git remote add [remote-ref-new-name] [url]
git remote -v
git remote show [remote-ref-name]
git remote rename [old name] [new name]
git remote rm [remote-ref-name]
================================================================ submodule ==========================================================================
git submodule add [url]
git submodule add [url] [remote-ref-new-name]
$ git clone [url] clone含有子模块的远程库
$ git submodule init
$ git submodule update
$ git clone --recursive [url] 等价于以上三条命令
================================================================ clone ==========================================================================
git clone [url]
git clone [url] [local dir name]
git clone -o [alternative name for origin] [url]