See Official Manual 
 
信息查看 Branch 1 2 git symbolic-ref --short HEAD git rev-parse --abbrev-ref HEAD 
 
 
Clone 1 2 git clone xxx git clone xxx --depth=1 
 
Commit 回退commit 1 2 3 4 5 # 保留修改 git reset HEAD~1 --soft # 不保留本地修改,!危险! git reset HEAD~1 --hard 
 
回退git add(从暂存区删除) 1 2 git reset HEAD -- git reset HEAD -<directoryName> 
 
设置本地文件不提交到远程(例如本地的.project等) 1 2 $ git update-index --assume-unchanged /path/to/file       #忽略跟踪 $ git update-index --no-assume-unchanged /path/to/file  #恢复跟踪 
 
查看忽略跟踪的文件
1 git ls-files -v | grep "^[[:lower:]]" 
 
Git合并两次commit为一个commit https://stackoverflow.com/questions/2563632/how-can-i-merge-two-commits-into-one 
1 2 3 4 5 6 $ git log --pretty=oneline a931ac7c808e2471b22b5bd20f0cad046b1c5d0d c b76d157d507e819d7511132bdb5a80dd421d854f b df239176e1a2ffac927d8b496ea00d5488481db5 a $ git rebase --interactive HEAD~2 
 
出现编辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 pick b76d157 b pick a931ac7 c # Rebase df23917..a931ac7 onto df23917 # # Commands: #  p, pick = use commit #  r, reword = use commit, but edit the commit message #  e, edit = use commit, but stop for amending #  s, squash = use commit, but meld into previous commit #  f, fixup = like "squash", but discard this commit's log message # # If you remove a line here THAT COMMIT WILL BE LOST. # However, if you remove everything, the rebase will be aborted. # 
 
改为
1 2 pick b76d157 b squash a931ac7 c 
 
保存后修改comment即可
Git修改上一次commit人 
https://www.jianshu.com/p/7def4f387e9f 
 
修改最近一次
1 git commit --amend --author="userName <userEmail>"  
 
批量修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 git filter-branch --env-filter '  if [ "$GIT_AUTHOR_NAME" = "oldName" ] then export GIT_AUTHOR_NAME="newName" export GIT_AUTHOR_EMAIL="newEmail" fi '  ref..HEADgit filter-branch --env-filter '  if [ "$GIT_COMMITTER_NAME" = "oldName" ] then export GIT_COMMITTER_NAME="newName" export GIT_COMMITTER_EMAIL="newEmail" fi '  ref..HEAD
 
Git gc 控制git repo大小
 
Patch Git create/apply patch
1 2 3 4 5 6 7 # 标准patch git diff master > patch git apply patch # git专用patch git format-patch -M master git am 0001-Fix1.patch 
 
Git clean https://git-scm.com/docs/git-clean 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 // 一次clean的演习 git clean -n // 删除当前目录下所有没有track过的文件. 他不会删除.gitignore文件里面指定的文件夹和文件, 不管这些文件有没有被track过. git clean -f // 删除指定路径下的没有被track过的文件 git clean -f <path> // 删除当前目录下没有被track过的文件和文件夹. git clean -df // 删除当前目录下所有没有track过的文件. 不管他是否是.gitignore文件里面指定的文件夹和文件 git clean -xf git reset --hard和git clean -f是一对好基友. 结合使用他们能让你的工作目录完全回退到最近一次commit的时候. git clean对于刚编译过的项目也非常有用. 如, 他能轻易删除掉编译后生成的.o和.exe等文件. 这个在打包要发布一个release的时候非常有用. 
 
Git merge https://git-scm.com/docs/git-merge 
1 2 3 4 5 6 git checkout master git merge dev               git merge --no-ff          git merge --squash       
 
–squash:是用来把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,于是使用–squash进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。需要进行一次额外的commit来“总结”一下,然后完成最终的合并。
Git去掉某个mergehttps://segmentfault.com/q/1010000000140446 https://git-scm.com/blog/2010/03/02/undoing-merges.html http://schacon.github.io/git/git-revert.html