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了