博文地址
我的GitHub | 我的博客 | 我的微信 | 我的邮箱 |
---|---|---|---|
baiqiantao | bqt20094 | [email protected] |
目录
- Git 使用技巧
- git 工作流程
- git rebase -i
- git cherry-pick
- 三个设置级别
- 日志格式
- 预置的日志格式
- 自定义日志格式
- author 和 committer
- HEAD 的含义
- 删除满足条件的分支

Git 的三个区域:
- Working Tree(workspace):当前的工作区域
- Index/Stage:暂存区域,使用 git add xx,就可以将 xx 添加到 Stage 里面
- Repository:提交的历史,即使用 git commit 提交后的结果
【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
【r】修改多个提交:
-
git rebase -i HEAD~影响的最少commit数
git rebase -i 前一个commitId
-
需要修改的那几条commit
pick
r
- 每个改为 reword 的 commit 都会提示你修改 commit 日志,修改保存后退出
注意,修改后会生成新的 commitId
cherry-pick 官方文档
cherry-pick 的翻译是 择优挑选
git cherry-pick <commitid> <commitid> # 挑选多个指定的 commit
git cherry-pick <start-commit>..<end-commit> # 指定范围,(左开右闭]
git cherry-pick <start-commit>^..<end-commit> # 指定范围,[左闭右闭]
git cherry-pick <branch name> # 挑选 branch 最顶端的提交
start-commit:离当前时间最早的提交,不包含
end-commit:离当前时间最近的提交,包含
如果 cherry-pick 多个 commit 时遇到冲突:
-
:继续进行下个操作git cherry-pick --continue
-
:结束 cherry-pick 操作,但是不会影响冲突之前多个提交中已经成功的git cherry-pick --quit
-
:停止本次操作,回到 cherry-pick 前的状态,包括多个提交中已经成功的git cherry-pick --abort
Git 的设置文件有三个级别:local、global、system
- 位于某个由Git控制的
下隐藏的项目
目录下的.git
文件,包含了具体到某个项目的配置。config
- 位于用户目录下的
文件 ,如.gitconfig
,包含了具体到某个用户配置的值。如果你传递参数选项C:\Users\Administrator\.gitconfig
给--global
,它将读写这个文件。git config
- 位于Git安装目录下的
文件,如gitconfig
,包含了适用于系统所有用户和所有库的值。如果你传递参数选项C:\Program Files\Git\mingw64\etc\gitconfig
--system
git config
级别 | 影响范围 | 配置文件位置 | 优先级 |
---|---|---|---|
| 本仓库 | | 最高 |
| 当前用户的所有仓库 | | 中 |
| 当前系统所有用户的所有仓库 | | 最低 |
其实还有一个 worktree
,估计是新增的,不常用,也不知道干嘛的
按指定格式显示日志信息
--pretty
,可选项有:
-
:显示 3 行(commitId、Author、Date) + 提交说明,默认--pretty=medium
-
:在一行显示,仅显示 commitId 和 提交说明--pretty=oneline
-
:显示 2 行(commitId、Author) + 提交说明--pretty=short
-
:显示 3 行(commitId、Author、Commit) + 提交说明--pretty=full
-
:显示 5 行(commitId、Author、AuthorDate、Commit、CommitDate) + 提交说明--pretty=fuller
-
:没啥用--pretty=email
-
--pretty=raw
-
:自定义日志格式--pretty=format:<string>
git log -3 --pretty=fuller
语法规则:
--pretty=format:<string>
------------------------------------------------ 内容 ------------------------------------------------
其中
<string>
部分可包含以下内容:
-
提交的完整哈希字串,%H
提交对象的简短哈希字串%h
-
树对象的完整哈希字串,%T
树对象的简短哈希字串%t
-
父对象的完整哈希字串,%P
父对象的简短哈希字串%p
-
作者(author)的名字,%an
提交者(committer)的名字%cn
-
作者的电子邮件地址,%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]
-
:红色的作者(author)的名字%Cred%an
-
:默认的白色的提交说明%Creset%s
-
:其他内容都使用默认的格式%Creset
参考
-
是实际的修改者(patch 的作者),author
是实际的提交者(把 patch 应用到 repository 里的人)committer
- 很多项目限制只有少数人可以提交 patch,但大家(patch 的作者)都可以把 patch 发送给这些人
-
只能通过 commit 得到,通过committer
或者git commit --reset-author
可以修改 Author(一般不会修改)--author="Name"
- 典型场景,如果你通过
合入了别人的一个修改(没有冲突),然后cherry-pick
到仓库,此时push
是别人,author
是你自己committer
作者是指最后一次文件的人,而提交者是指
修改
该文件的人
提交
-
最后一次提交HEAD
-
指最后一个提交的父提交(等同于HEAD^
)HEAD~1
-
倒数第 n 次提交HEAD~n
git branch | grep 'dev' | xargs git branch -d //删除分支名包含 dev 的分支
命令解释:
-
:用于列出本地所有分支git branch
-
:管道命令,用于将一串命令串联起来,前面命令的|
可以作为后面命令的输出
输入
-
:搜索过滤命令,使用正则表达式搜索文本,并把匹配的行打印出来grep
-
:参数传递命令,用于将标准输入作为命令的xargs
传给下一个命令参数
2019-7-14
本文来自博客园,作者:白乾涛,转载请注明原文链接:https://www.cnblogs.com/baiqiantao/p/11111287.html