【Git】Git使用整理

一、Git安装并配置

  1. 生成密钥对
ssh-keygen
  1. 获取公钥
cat ~/.ssh/id_rsa.pub
  1. 测试访问
ssh -T git@github.com
  1. 自定义配置
## 配置代码提交的用户名和邮箱
git config user.name qingshan
git config user.email zqunor@foxmail.com

此处的配置可以添加--global配置全局的,不用在每个仓库下都配置一遍。但是实际可能不会这样配置,因为公司项目(花名)和个人项目(真名)的用户名可能为了区分是不一样的,所以根据自己的情况看。

细节可参看:git+github入门

二、实战开发

1.了解分支

通常有一个线上分支(master/main)、测试分支(dev/deploy)、开发分支(qingshan/...)

  • 开发分支(qingshan/...): 自己本地环境开发功能的代码分支,是一个从 线上分支 切出来的新分支,用于新功能的开发、和测试通过后的单独上线。
  • 测试分支(dev/deploy): 测试分支,指向测试环境的代码分支,集合了所有开发者的开发中代码,不能直接合并到线上分支
  • 线上分支(master/main): 代码通过测试通过后,合并到该分支,并发布到线上环境,是线上环境运行的代码。

2.基本开发流程示意图

3.步骤说明

① 从 线上分支(master)上新开一个开发分支(qingshan)到本地进行开发,
② 提测。将本地的开发分支合并到测试分支(dev)[此处实际有将测试代码直接发布到测试环境的任务],和前端联调并让测试人员测试
③ 改测试bug,如果测试过程有bug或优化,需要回到开发分支(qingshan)修改,
④ 修完bug后再次将开发分支(qingshan)合并到测试分支(dev),
重复②.③.④
⑤ 全部开发完,并测试完之后,将开发分支(qingshan)的代码合并到线上分支(master)

4.终端命令执行过程

步骤①操作

master: git checkout -b qingshan

步骤② 操作

qingshan: git add .
qingshan: git commit -m '提交开发代码'
qingshan: git checkout dev
dev: git pull origin dev
dev: git merge qingshan
dev: git push origin dev

步骤③ 操作

dev: git checkout qingshan
qingshan: git add .
qingshan: git commit -m 'fix xxx的问题'

步骤④ 操作

qingshan: git checkout dev
dev: git pull origin dev
dev: git merge qingshan
dev: git push origin dev

步骤⑤ 操作

dev: git checkout master
master: git pull origin master
master: git checkout qingshan
qingshan: git rebase -i master
qingshan: git checkout master
master: git merge qingshan --no-ff
master: git push origin master

  1. 线上环境部署

测试环境会有流水线自动发布 git 仓库的代码到测试服务器,但是线上环境安全起见,是需要手动发布的。

三、问题整理

1.代码冲突

## 将master合并到dev的时候冲突
=> 用master的代码覆盖dev的()

## 冲突太多,改了一部分之后改不下去, 无法撤销, 又不能继续
=> 提交并放弃此次提交

2.代码回滚

## 回滚到上一次提交之前, 将上一次的提交恢复到暂存区,可重新提交,或舍去
git reset HEAD^

3.代码暂存

使用场景:

  • 开发中突然需要处理其他问题的情况,此时不适合直接提交代码,也不能全部舍弃。
  • 在开发分支1上改了开发分支2上的需求,因为同时修改了某个文件,导致此时直接切到分支2上会有代码冲突。不想处理冲突的话,就可以将当前改动暂存起来,然后切到分支 2 上恢复。
## 将开发中的代码添加的暂存区
git stash

## 将上次提交暂存的代码恢复到当前分支
git stash pop stash@{0}

## 查看暂存区有多少个
git stash list

## 恢复上上次暂存的代码
git stash pop stash@{1}
  1. 分支/提交历史美化

场景说明: 由于每次提交都是“载入史册”的,所以为了少记录点自己的不完美提交,可以美化一下代码提交的历史记录。

## 重新设置提交历史
git rebase -i master

## 默认全部 pick, 可以将 pick 改成对应需要的命令。
pick ## 采用该提交
stash ## 采用该提交的内容,但是将这次提交内容合并到上一次被采用的提交里,不单独作为一次提交节点,保留提交文案
fixup ## 采用该提交,将这次提交内容合并到上一次被采用的提交里,不单独作为一次提交节点,不保留提交文案
drop ## 不保留该提交代码

5.代码误提交

场景说明: 实际工作中,可能并发的处理几个需求,这样就可能存在同时有几个开发分支的情况, 并且需要来回切换分支, 这可能导致将另外一个分支(分支2)需求的代码提交到了当前分支(分支1), 这时候怎么办?

# 获取误提交的版本号哈希值(hash1)
> 分支1: git log --oneline -n 5

# 切换到分支2
> 分支1: git checkout 分支2

# 获取上一次的提交
> 分支2: git cherry-pick hash1

这样, 就将分支1上误提交的代码版本hash1, 提交到了分支2上, 对于分支1, 如果是新分支,可以直接删掉切新分支,如果已经有开发中的其他提交,可以在合并上线的时候 执行git rebase -i master的时候,drop 掉误提交的hash1

git pull 合并规则配置

hint: Pulling without specifying how to reconcile divergent branches is
hint: discouraged. You can squelch this message by running one of the following
hint: commands sometime before your next pull:
hint:
hint:   git config pull.rebase false  # merge (the default strategy)
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
From github.com:zqunor/mypro
 * branch            master     -> FETCH_HEAD
Already up to date.

参考资料:

posted @ 2022-05-25 01:20  程序小工  阅读(64)  评论(0编辑  收藏  举报