前言
git工作流是一个基于分支的、支持团队协作的效率工程。我们可以在工作中,很方便的合并、review他人代码,并且可以清晰的看到提交记录,方便代码回滚。
很多互联网企业都已经采用这种多人协同的开发方式,真的非常爽,谁用谁知道。
git工作流
通过如下工作流,可以很轻松的完成功能提交, 并且还可以让合并代码的人轻松review、comment.
graph TD
fork到自己仓库.. --> 创建功能分支... --> 提交点代码到功能分支... --> create-pull-request....
如下为React仓库中的某个pr
工作流常见问题汇总
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的原因。
2. rebase | merge 出现冲突
git rebase upstream/master
get merge master
rebase 和 merge 都有可能产生冲突
如果是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了