常用操作

git log

Table 1. git log 的常用选项

选项 说明
-p 按补丁格式显示每个提交引入的差异。
--stat 显示每次提交的文件修改统计信息。
--shortstat 只显示 —stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。
--relative-date 使用较短的相对时间而不是完整格式显示日期(比如,“2 weeks ago”)。
--graph 在日志旁以 ASCII 图形显示分支与合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(用来定义自己的格式)。

Table 2. git log --pretty=format 常用的选项

选项 说明
%H 提交的完整哈希值
%h 提交的简写哈希值
%T 树的完整哈希值
%t 树的简写哈希值
%P 父提交的完整哈希值
%p 父提交的简写哈希值
%an 作者名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 —date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期(距今多长时间)
%s 提交说明

Table 3. 限制 git log 输出的选项

选项 说明
-(n) 仅显示最近的 n 条提交。
--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。
--author 仅显示作者匹配指定字符串的提交。
--committer 仅显示提交者匹配指定字符串的提交。
--grep 仅显示提交说明中包含指定字符串的提交。
-S 仅显示添加或删除内容匹配指定字符串的提交。

获取更新日志信息

  1. git shortlog --no-merges master --format="%h - %ad - %an - %s" --not [commit-idtag]
  2. #获取某人的提交日志
  3. git log --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%H - %ad - %an - %s' --no-merges --all --grep='fix' --author="qizai"

暂存修改

  1. # 保存所有正在追踪的文件
  2. git stash save "日志信息"
  3. # 列出所有的暂存项
  4. git stash list
  5. # 获取并删除暂存项
  6. git stash pop stash@{1}
  7. # 删除草稿
  8. git stash drop stash@{0}
  9. # 读取草稿
  10. git stash apply stash@{0}
  11. # 移除远程仓库上不存在的分支
  12. git fetch -p

tag查看

  1. git tag --format '%(tag) %(taggerdate:iso-strict) %(taggername)' --sort=taggerdate | awk '{printf "%-17s %s %s\n", $1,$2,$3}'

Branch

  1. # 获取远程tag
  2. git fetch origin tag <tagname>
  3. # 推送本地tag到远程
  4. git push --tags
  5. # 重命名本地分支
  6. git branch -m devel develop
  7. # 删除远程分支
  8. git push --delete origin devel
  9. # 删除掉没有与远程分支对应的本地分支
  10. git fetch -p
  11. # 删除分支和tag
  12. git push origin --delete <branchName>
  13. git push origin --delete tag <tagname>
  14. # 切换远程分支
  15. git checkout -b <branchName> origin/<branchName>

撤销修改

  1. # HEAD重置到上一次提交的版本,并保留未提交的本地修改
  2. $ git reset --keep <commit>
  3. # 放弃工作目录下的所有修改
  4. $ git reset --hard HEAD
  5. # HEAD重置到指定的版本,并抛弃该版本之后的所有修改
  6. $ git reset --hard <commit-hash>
  7. # 用远端分支强制覆盖本地分支
  8. $ git reset --hard <remote/branch> e.g., upstream/master, origin/my-feature
  9. # 放弃某个文件的所有本地修改
  10. $ git checkout HEAD <file>
  11. 撤销远程修改(创建一个新的提交,并回滚到指定版本)
  12. $ git revert <commit-hash>

编辑commit(合并或修改)

  1. #rebase 最近 3 个提交
  2. git rebase -i HEAD~3
  3. #1. 保留第一行的 pick,剩余提交替换为 squash s
  4. #2. 清理提交日志并保存(vi 编辑器中键入 :wq 即可保存)
  5. git rebase --abort #中止rebase
  6. # 编辑上次提交
  7. git commit --amend -m "更好的提交日志"
  8. # 在上次提交中附加一些内容,保持提交日志不变
  9. git add . && git commit --amend --no-edit