Git 版本控制-2 使用技巧 快捷操作
目录
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 的翻译是
择优挑选
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
:继续进行下个操作git cherry-pick --quit
:结束 cherry-pick 操作,但是不会影响冲突之前多个提交中已经成功的git cherry-pick --abort
:停止本次操作,回到 cherry-pick 前的状态,包括多个提交中已经成功的
三个设置级别
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
,它将读写这个文件。
级别 | 影响范围 | 配置文件位置 | 优先级 |
---|---|---|---|
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:<string>
:自定义日志格式
git log -3 --pretty=fuller
自定义日志格式
语法规则:--pretty=format:<string>
------------------------------------------------ 内容 ------------------------------------------------
其中<string>
部分可包含以下内容:
%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-06-30
本文来自博客园,作者:白乾涛,转载请注明原文链接:https://www.cnblogs.com/baiqiantao/p/11111287.html