常用操作
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 |
仅显示添加或删除内容匹配指定字符串的提交。 |
获取更新日志信息
git shortlog --no-merges master --format="%h - %ad - %an - %s" --not [commit-id或tag]
#获取某人的提交日志
git log --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%H - %ad - %an - %s' --no-merges --all --grep='fix' --author="qizai"
暂存修改
# 保存所有正在追踪的文件
git stash save "日志信息"
# 列出所有的暂存项
git stash list
# 获取并删除暂存项
git stash pop stash@{1}
# 删除草稿
git stash drop stash@{0}
# 读取草稿
git stash apply stash@{0}
# 移除远程仓库上不存在的分支
git fetch -p
tag查看
git tag --format '%(tag) %(taggerdate:iso-strict) %(taggername)' --sort=taggerdate | awk '{printf "%-17s %s %s\n", $1,$2,$3}'
Branch
# 获取远程tag
git fetch origin tag <tagname>
# 推送本地tag到远程
git push --tags
# 重命名本地分支
git branch -m devel develop
# 删除远程分支
git push --delete origin devel
# 删除掉没有与远程分支对应的本地分支
git fetch -p
# 删除分支和tag
git push origin --delete <branchName>
git push origin --delete tag <tagname>
# 切换远程分支
git checkout -b <branchName> origin/<branchName>
撤销修改
# 将HEAD重置到上一次提交的版本,并保留未提交的本地修改
$ git reset --keep <commit>
# 放弃工作目录下的所有修改
$ git reset --hard HEAD
# 将HEAD重置到指定的版本,并抛弃该版本之后的所有修改
$ git reset --hard <commit-hash>
# 用远端分支强制覆盖本地分支
$ git reset --hard <remote/branch> e.g., upstream/master, origin/my-feature
# 放弃某个文件的所有本地修改
$ git checkout HEAD <file>
撤销远程修改(创建一个新的提交,并回滚到指定版本)
$ git revert <commit-hash>
编辑commit(合并或修改)
#rebase 最近 3 个提交
git rebase -i HEAD~3
#1. 保留第一行的 pick,剩余提交替换为 squash 或 s
#2. 清理提交日志并保存(vi 编辑器中键入 :wq 即可保存)
git rebase --abort #中止rebase
# 编辑上次提交
git commit --amend -m "更好的提交日志"
# 在上次提交中附加一些内容,保持提交日志不变
git add . && git commit --amend --no-edit