记录大部分常用 git 命令,以便忘记的时候直接查看

分支

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
git branch // 查看分支

git branch -r // 查看远程分支

git branch -a // 查看所有分支

git branch branch-name// 新建分支

git checkout branch-name// 切换分支

git checkout -b branch-name// 创建并切换分支

git branch -M old-branch new-branch // 重命名分支

git branch -D dev // 删除分支

git branch -r -d origin/branch-name // 删除远程分支

git push origin :branch-name // 删除远程分支 推送到远端

git push origin --delete branch-name // 直接删除远端分支 git 1.7 以后支持

git merge branch-name // 合并分支到当前分支

git merge --abort // 取消合并操作

git rebase branch-name // 线性合并分支到当前分支

git rebase --abort // 取消合并操作

git cherry-pick // 提取某一次提交合并到当前分支

git checkout --orphan new_branch // 切换到一个没有任何关系的全新独立分支 等同于清空所有 commit

撤销

1
2
3
4
5
6
7
8
9
git reset [--hard|soft|mixed|merge|keep] [ HEAD] [files] // 回退到某次提交

git reflog // 查看撤销的日志,找回 git reset --hard 丢失的提交记录

git checkout -- [file] // 将文件恢复到没有 add 时候的状态

git clean -df // 删除没有 add 的文件和目录

git revert commit-id // 该命令撤销对某个 commit 的提交,这一撤销动作会作为一个新的修改存储起来,这样,当你和服务器同步时,就不会产生什么副作用。

标签

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
git tag // 查看标签

git tag -l 'v1.4.2.*' // 查询标签

git tag tag-name // 打标签

git tag -a v1.4 -m 'my version 1.4' // 打含注释的标签

git show tag-name // 查看标签详情

git push origin v1.5 // 推送标签到远端

git push origin --tags // 推送本地所有标签到远端

git tag -d tag-name // 删除标签

git push origin :refs/tags/tag-name // 删除远端标签

git push origin --delete tag tag-name // 直接删除远端 tag git 1.7 以后支持

储藏

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
git stash // 储藏现有工作

git stash list // 查看现有储藏列表

git stash apply stash@{1} // 取出储藏的工作

git stash drop stash@{0} // 删除储藏记录

git stash pop // 取出储藏并直接移除储藏记录

git stash clear // 清空所有储藏

比较

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
git diff // 查看尚未暂存的文件更新了哪些部分

git diff filename // 查看尚未暂存的某个文件更新了哪些

git diff --cached // 查看已经暂存起来的文件和上次提交的版本之间的差异

git diff --cached filename // 查看已经暂存起来的某个文件和上次提交的版本之间的差异

git diff commit1 commit2 // 查看某两个版本之间的差异

git diff commit1:filename commit2:filename // 查看某两个版本之间某个文件的差异

查看修改记录

1
2
3
4
5
git show commitid // 查看某次提交的改动

git blame -L 100,+100 // 查看文件行数范围内的最后修改者是谁

git log -L start,end: // 查看某个文件行数范围内的所有修改记录

统计

1
2
3
4
5
6
7
git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' - // 查看 git 上的个人代码量

git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done // 每个人的代码量统计

git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5 // 提交量前 5 名

git log --oneline | wc -l // 项目总提交数

其他

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
git fetch origin // 获取远端最新的信息包括[分支 commit tag]

git mv oldfilename newfilename // 重命名文件

git rm filename // 删除文件

git rm --cached filename // 删除文件记录,但是本地文件不删除

git config core.filemode false // 禁止 Git 监听权限的变化

git update-index --assume-unchanged filename // 本地忽略已经在版本库中的文件

git update-index --no-assume-unchanged filename // 还原上步操作