git合併分支上的commit爲一條commit到master

標籤: gitgit


原因?

有一次被人問到怎麼把一個分支的全部commit按一個commit合併到主分支上,當時一臉蒙B,平時開發都是直接merge,不多考慮到這種問題,因而特地搜索了相關資料。編輯器

場景

其實在開發中,咱們永遠都是保留一個主master分支幹靜,咱們都是會從新拉一個dev分支作開發,遇到BUG就會拉BUG分支解決BUG,可是在分支上作開發和解決BUG不僅會有一個提交,而合併到主幹上也沒有必要讓別的開發看到冗餘的commit信息,其實別的開發只要須要看到這個分支是解決了什麼問題或者開發了什麼任務便可。.net

按普通的提交流程是:3d

git checkout master //切換回主分支
    git pull //拉取master代碼
    git merge dev //如無衝突就已經合併成功如遇衝突就解決衝突再提交代碼

若是想合併分支commit到主分支能夠按以下走法:code

git checkout master //切換回主分支
    git pull //拉取master代碼
    git merge dev --squash //如遇衝突就解決衝突
    git commit -m "這裏是註釋"

原理就是--squash會把分支上的全部相對master分支的修改一次性推送到本地,這樣就能夠解決在master上只會看到一個提交了。blog

方法2

另外一種方法就是經過rebase來作合併commit再merge到master分支
1:假設當前在dev分支上,提交了二條commit修改,在dev分支上執行以下代碼開發

git rebase -i master

這時 git 會打開編輯器,你會看到 dev 分支上的 2 個最新 commit,以及一些指引提示
以下圖
執行rebaseget

每一個 commit 前有一個操做命令,默認是 pick ,表示該行被選中,須要進行 rebase 操做。下面一堆註釋的指引中還有幾個指令,咱們經常使用到的是如下 2 個it

  • squash:將這一行的 commit 與上一個 commit 進行合併
  • fixup:與 squash 相同,只是不會保留這行 commit 的提交 message 信息
    按以下圖保存後,dev 分支就只剩下 1 個 commit 了,這個合併後的 commit 提交的信息包含以前 2 個 commit 的信息
    修改pick爲squash
    再切回master分支執行合併操做便可:
git checkout master
    git merge dev

這樣就作到你一個commit提交到了主分支達到要求ast

參考文章:
經過--squash合併commit
經過rebase合併commit

相關文章
相關標籤/搜索