Git使用

Git是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小到大的项目。Git 易于学习,占用空间小,性能快如闪电。它凭借廉价的本地分支、方便的暂存区域和多个工作流程等功能。

1.安装

2.命令

去这里练习!!!
如果想要熟练掌握工作用的git flow使用,务必熟练掌握mergerebase(rebase -i)resetcherry-pickcheckout(switch)tagstash的使用!!!

3.git 工作流程

3.1 Git Flow

  • 主干分支
  • 稳定分支
  • 开发分支
  • 补丁分支
  • 修改分支

3.2 GitHub Flow

  • 创建分支
  • 添加提交
  • 提交 PR 请求
  • 讨论和评估代码
  • 部署检测
  • 合并代码

3.3 GitLab Flow

  • 带生产分支
  • 带环境分支
  • 带发布分支

4.git commit规范

1
2
# 类型之后的!是可选的,有它意味着是人们需要关注的重点变更
<类型>[!][可选的作用域]: <描述>

4.1 所有的 type 类型如下:**

feat: 新增 feature
fix: 修复 bug
docs: 仅仅修改了文档,比如 README, CHANGELOG, CONTRIBUTE等等
style: 仅仅修改了空格、格式缩进、逗号等等,不改变代码逻辑
refactor: 代码重构,没有加新功能或者修复 bug
perf: 优化相关,比如提升性能、体验
test: 测试用例,包括单元测试、集成测试等
chore: 改变构建流程、或者增加依赖库、工具等
revert: 回滚到上一个版本

4.2 Examples

1
feat(api)!: add send email
1
chore: modify dockerfile basice image version
1
docs(api): update api docs

5.git tips

5.1 git log

对于码农来说git log是自然熟悉不过的了,但是每天面对git log原始的日志格式,你是不是觉得很烦人啊,因为上面的给的信息太不人性化了,而且我相信大部分的码农的提交日志都是随心所欲的

1
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

不过很显然上面的命令有点长,没关系,我们可以给上面的命令添加一个别名,的日志的时候只需要输入git lg就可以,git lg -p 可查看详细信息。如下:

1
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

5.2 rebase -i

日常开发中,我们为了完成一个功能或者特性,提交很多个 commit 记录。但是在最后,提交 PR 之前,一般情况下,我们是应该整理下这些提交记录的。有些 commit 需要合并起来,或者需要将其删除掉,等等。

序号 选项列表 对应含义
1 p/pick 使用这个commit记录
2 r/reword 使用这个commit记录,并且修改提交信息
3 e/edit 使用这个commit记录,rebase时会短暂的允许你修改这个commit
4 s/squash 使用这个commit记录,但是会与上一个commit合并
5 f/fixup 和squash相同,但是不会保留commit时候提交的信息
6 x/exec 执行其它shell命令
7 d/drop 移除这个commit记录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 调整最近五次的提交记录
$ git rebase -i HEAD~5
$ git rebase -i 5af4zd35 # 往前第六次的commit值
reword c2aeb6e 3rd commit
squash 25a3122 4th commit
pick 5d36f1d 5th commit
fixup bd5d32f 6th commit
drop 581e96d 7th commit

# 查看提交历史记录
$ git log
* ce813eb - (HEAD -> master) 5th commit
* aa2f043 - 3rd commit -> modified
* 6c5418f - 2nd commit
* c8f7dea - 1st commit

5.3 git commit –amend

有时候提交之后,我们才发现提交的历史记录中存在这一些问题,而这个时候我们又不想新生成一个 commit 记录,且达到一个修改的目录。即,修改之前的 commit 提交记录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 不使用分页器
$ git --no-pager log --oneline -1
d5e96d9 (HEAD -> master) say file

# 改变提交信息并加入暂存区
$ echo "hello" > say.txt
$ git add -u

# 改变当前最新一次提交记录
$ git commit --amend
# 改变且息不改变提交信
$ git commit --amend --no-edit
# 改变当前最新一次提交记录并修改信息
$ git commit --amend -m "some_info"

# 不使用分页器
$ git --no-pager log --oneline -1
9e1e0eb (HEAD -> master) say file

5.4 找回代码

如何找回我们丢失的内容和记录?

我们之前说过,使用下面命令回退内容、强制推送代码、删除本地分支,都是非常危险的操作,因为重置之后我们就没有办法在找到之前的修改内容了

1
2
3
4
5
6
# 回退
$ git reset --hard <commit>
# 推送
$ git push origin master -f
# 分支
$ git branch -D <branch_name>

其实 Git 给我们留了一个后门,就是使用 relflog 命令来找回之前的内容,只不过是相对来说麻烦一些。而原理也很简答,就是在我们使用 Git 命令操作仓库的时候,Git 偷偷地帮助我们把所有的操作记录了下来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看日志记录
$ git --no-pager log --oneline -1
4bc8703 (HEAD -> master) hhhh

# 回退到上次提交
$ git reset --hard HEAD~1

# 查看引用日志记录
$ git reflog
6a89f1b (HEAD -> master) HEAD@{0}: reset: moving to HEAD~1
4bc8703 HEAD@{1}: commit (amend): hhhh

# 找回内容
$ git cherry-pick 4bc8703

Git使用
https://vegetablest.github.io/2021/03/21/git使用/
作者
af su
发布于
2021年3月21日
许可协议