git工做流
是一个基于分支的、支持团队协做的效率工程。咱们能够在工做中,很方便的合并、review
他人代码,而且能够清晰的看到提交记录,方便代码回滚。git
不少互联网企业都已经采用这种多人协同的开发方式,真的很是爽,谁用谁知道。web
经过以下工做流,能够很轻松的完成功能提交, 而且还可让合并代码的人轻松review、comment.markdown
graph TD fork到本身仓库.. --> 建立功能分支... --> 提交点代码到功能分支... --> create-pull-request....
以下为React仓库中的某个pr svg
固然不是每一个pr都是一番风顺的。好比你的功能分支已经写了几个月了, 此时你本地的代码相对于远端仓库来讲就过久远了,若是不更新的话,可能会致使有不少冲突。fetch
须要在你的功能分支上再拉一次远端代码。url
graph TD git_pull_upstream_master..... --> create_pull_request....
细心的同窗可能会发现, 在你此次pr的commit里,包含了主分支的commit。spa
3an4js2 feature: xxx
3an4js2 master commit three
3an4js2 master commit two
3an4js2 master commit one
复制代码
这是由于git pull 至关于把远程仓库的的代码合并到你本地仓库了,天然就有这些commit了。3d
那有没有办法使 既能更新本地代码 又 没有这些不属于个人commit
呢?指针
graph TD 1.git_fetch_upstream_master...... --> 2.git_rebase_upstream/master...... --> 3.git_push_-f...
rebase 至关于把当前分支的修改 拼接在 最新的master后面, 以下mywork
分支的c5,c6就直接拼接在了origin
后面, 没有多余的提交记录code
而pull=fetch+merge
, merge
会把origin的commit 合并到你的分支里。这也是pr里会显示主分支的commit的缘由。
git rebase upstream/master
get merge master
复制代码
rebase
和 merge
都有可能产生冲突
若是是rebase产生冲突
git add
,git rebase --continue
就能够了merge产生冲突
从新走一遍提交流程
有时候,咱们要提交的功能很复杂,可能会产生多个commit, 可是在提交pr的时候,只须要一个汇总的commit 就能够了,这个要怎么作呢?
例如:
将这1 - 4提交合并为一个
咱们能够将当前git指针
指到倒数第五次提交,这样1 ~ 4次提交就变为未提交状态.
git reset 2as4cjd4(commitId)
再从新add, commit 就能够了
复制代码
这个命令就是 将远端id为..的pr拉取到本地的temp分支,切换到temp分支就能够看到远端的pr了