Git -2 使用技巧 快捷操作 [MD]


目录

  • 目录
  • Git 使用技巧
    • git 工作流程
    • git rebase -i
    • git cherry-pick
    • 三个设置级别
    • 日志格式
      • 预置的日志格式
      • 自定义日志格式
    • author 和 committer
    • HEAD 的含义
    • 删除满足条件的分支

我的GitHub 我的博客 我的微信 我的邮箱
baiqiantao baiqiantao bqt20094 baiqiantao@sina.com

目录

Git 使用技巧

git 工作流程

Git 的三个区域:

  • Working Tree(workspace):当前的工作区域
  • Index/Stage:暂存区域,使用 git add xx,就可以将 xx 添加到 Stage 里面
  • Repository:提交的历史,即使用 git commit 提交后的结果

git rebase -i

【s】合并多个提交:

  • 执行 git rebase -i HEAD~影响的最少commit数git rebase -i 前一个commitId
  • 需要合并的那条commit 前面的 pick 改为 s,保存后退出
  • 会提示你修改 commit 日志,修改完保存后退出

假如我们只是合并了第 2 条和第 3 条的commit,但是第 1 条的 commitId 也变了。

【d】删除多个提交:

  • 执行 git rebase -i HEAD~影响的最少commit数git rebase -i 前一个commitId
  • 需要删除的那几条commit 前面的 pick 改为 d,保存后退出
  • 会提示你修改 commit 日志,修改完保存后退出

【r】修改多个提交:

  • 执行 git rebase -i HEAD~影响的最少commit数git rebase -i 前一个commitId
  • 需要修改的那几条commit 前面的 pick 改为 r,保存后退出
  • 每个改为 reword 的 commit 都会提示你修改 commit 日志,修改保存后退出

注意,修改后会生成新的 commitId

git cherry-pick

cherry-pick 官方文档

cherry-pick 的翻译是择优挑选

git cherry-pick   # 挑选多个指定的 commit
git cherry-pick .. # 指定范围,(左开右闭]
git cherry-pick ^.. # 指定范围,[左闭右闭]
git cherry-pick  # 挑选 branch 最顶端的提交

start-commit:离当前时间最早的提交,不包含
end-commit:离当前时间最近的提交,包含

如果 cherry-pick 多个 commit 时遇到冲突:

  • git cherry-pick --continue:继续进行下个操作
  • git cherry-pick --quit:结束 cherry-pick 操作,但是不会影响冲突之前多个提交中已经成功的
  • git cherry-pick --abort:停止本次操作,回到 cherry-pick 前的状态,包括多个提交中已经成功的

三个设置级别

Git 的设置文件有三个级别:local、global、system

  • 位于某个由Git控制的项目下隐藏的.git目录下的config文件,包含了具体到某个项目的配置。
  • 位于用户目录下的.gitconfig文件 ,如C:\Users\Administrator\.gitconfig,包含了具体到某个用户配置的值。如果你传递参数选项--globalgit config,它将读写这个文件。
  • 位于Git安装目录下的gitconfig文件,如C:\Program Files\Git\mingw64\etc\gitconfig,包含了适用于系统所有用户和所有库的值。如果你传递参数选项--systemgit config,它将读写这个文件。
级别 影响范围 配置文件位置 优先级
local 本仓库 /特定Git仓库/.git/config 最高
global 当前用户的所有仓库 /Users/当前用户/.gitconfig
system 当前系统所有用户的所有仓库 /Git安装目录/mingw64/etc/gitconfig 最低

其实还有一个worktree,估计是新增的,不常用,也不知道干嘛的

日志格式

预置的日志格式

按指定格式显示日志信息 --pretty ,可选项有:

  • --pretty=medium:显示 3 行(commitId、Author、Date) + 提交说明,默认
  • --pretty=oneline:在一行显示,仅显示 commitId 和 提交说明
  • --pretty=short:显示 2 行(commitId、Author) + 提交说明
  • --pretty=full:显示 3 行(commitId、Author、Commit) + 提交说明
  • --pretty=fuller:显示 5 行(commitId、Author、AuthorDate、Commit、CommitDate) + 提交说明
  • --pretty=email:没啥用
  • --pretty=raw:没啥用
  • --pretty=format::自定义日志格式
git log -3 --pretty=fuller

自定义日志格式

语法规则:--pretty=format:

------------------------------------------------ 内容 ------------------------------------------------

其中部分可包含以下内容:

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

------------------------------------------------ 颜色 ------------------------------------------------

git config --global color.ui true //启用默认的颜色设置
git config --global color.ui false //关闭默认的颜色设置
git config --global color.diff.meta "blue black bold"
  • 可以针对具体的内容进行设置如:color.branch、color.diff、color.interactive、color.status
  • 颜色可用值有:normal、black、red、green、yellow、blue、magenta、cyan、white
  • 字体可选值有:bold、dim、ul、blink、reverse

------------------------------------------------ 案例 ------------------------------------------------

git log -3 --pretty=format:"%Cred%h %Cgreen[%cr] %Cred%an %Creset%s %Creset"

格式 %Cred%h %Cgreen[%cr] %Cred%an %Creset%s %Creset 的含义:

  • %Cred%h:红色的简短哈希字串
  • %Cgreen[%cr]:绿色的提交日期,按多久以前的方式显示
  • %Cred%an:红色的作者(author)的名字
  • %Creset%s:默认的白色的提交说明
  • %Creset:其他内容都使用默认的格式

author 和 committer

参考

  • author是实际的修改者(patch 的作者),committer是实际的提交者(把 patch 应用到 repository 里的人)
  • 很多项目限制只有少数人可以提交 patch,但大家(patch 的作者)都可以把 patch 发送给这些人
  • committer只能通过 commit 得到,通过 git commit --reset-author 或者 --author="Name" 可以修改 Author(一般不会修改)
  • 典型场景,如果你通过cherry-pick合入了别人的一个修改(没有冲突),然后push到仓库,此时author是别人,committer是你自己

作者是指最后一次修改文件的人,而提交者是指提交该文件的人

HEAD 的含义

  • HEAD 最后一次提交
  • HEAD^ 指最后一个提交的父提交(等同于 HEAD~1)
  • HEAD~n 倒数第 n 次提交

删除满足条件的分支

git branch | grep 'dev' | xargs git branch -d //删除分支名包含 dev 的分支

命令解释:

  • git branch:用于列出本地所有分支
  • |:管道命令,用于将一串命令串联起来,前面命令的输出可以作为后面命令的输入
  • grep:搜索过滤命令,使用正则表达式搜索文本,并把匹配的行打印出来
  • xargs:参数传递命令,用于将标准输入作为命令的参数传给下一个命令

2019-7-14