常用操作
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
# 获取远程taggit fetch origin tag <tagname># 推送本地tag到远程git push --tags# 重命名本地分支git branch -m devel develop# 删除远程分支git push --delete origin devel# 删除掉没有与远程分支对应的本地分支git fetch -p# 删除分支和taggit 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