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