Git工作流|8月更文挑战

431 阅读2分钟

前言

git工作流是一个基于分支的、支持团队协作的效率工程。我们可以在工作中,很方便的合并、review他人代码,并且可以清晰的看到提交记录,方便代码回滚。

很多互联网企业都已经采用这种多人协同的开发方式,真的非常爽,谁用谁知道。

git工作流

通过如下工作流,可以很轻松的完成功能提交, 并且还可以让合并代码的人轻松review、comment.

graph TD
fork到自己仓库.. --> 创建功能分支... --> 提交点代码到功能分支... --> create-pull-request....

如下为React仓库中的某个pr image.png

工作流常见问题汇总

1. 本地代码太久远,需要更新

当然不是每个pr都是一番风顺的。比如你的功能分支已经写了几个月了, 此时你本地的代码相对于远端仓库来说就太久远了,如果不更新的话,可能会导致有很多冲突。

需要在你的功能分支上再拉一次远端代码。

graph TD
git_pull_upstream_master..... --> create_pull_request....

细心的同学可能会发现, 在你这次pr的commit里,包含了主分支的commit。


3an4js2 feature: xxx
3an4js2 master commit three
3an4js2 master commit two
3an4js2 master commit one

这是因为git pull 相当于把远程仓库的的代码合并到你本地仓库了,自然就有这些commit了。

那有没有办法使 既能更新本地代码 又 没有这些不属于我的commit 呢?

graph TD
1.git_fetch_upstream_master...... --> 2.git_rebase_upstream/master...... --> 3.git_push_-f...

rebase 相当于把当前分支的修改 拼接在 最新的master后面, 如下mywork分支的c5,c6就直接拼接在了origin后面, 没有多余的提交记录

pull=fetch+merge, merge会把origin的commit 合并到你的分支里。这也是pr里会显示主分支的commit的原因。

image.png

2. rebase | merge 出现冲突

git rebase upstream/master
get merge master

rebasemerge 都有可能产生冲突

如果是rebase产生冲突

  • 我们修改完冲突,只用git add,
  • git rebase --continue就可以了

merge产生冲突

  • 重新走一遍提交流程

3. 合并多个commit为1个

有时候,我们要提交的功能很复杂,可能会产生多个commit, 但是在提交pr的时候,只需要一个汇总的commit 就可以了,这个要怎么做呢?

例如:

  • 1: 我的第4次提交
  • 2: 我的第3次提交
  • 3: 我的第2次提交
  • 4: 我的第1次提交
  • 5: feat: ...

将这1 - 4提交合并为一个

我们可以将当前git指针 指到倒数第五次提交,这样1 ~ 4次提交就变为未提交状态.

git reset 2as4cjd4(commitId)

再重新add, commit 就可以了

4.如何将代码切换到别人的pr

  • 先找到pr的id
  • git fetch upstream pull/id/head:temp
  • git checkout temp

这个命令就是 将远端id为..的pr拉取到本地的temp分支,切换到temp分支就可以看到远端的pr了