Git merge是不是必須合併分支?能否合併兩個commit?
学习ing
学习ing 2017-06-17 09:15:31
0
2
1212

git merge 合併操作,是不是必須合併分支尖端(tip of branch),能否合併任意的兩個提交commit?
例如,存在分支hotfix和分支master,結構如下:

/A+--+B+----+C hotfix /

init---->D --->E --->F ---->G master

#問題1:
我想合併thotfix分支中途的某個提交,例如B到目前分支 master上。
可以嗎?
因為從指令的參數解釋來看,可以使用commit,而不是必須使用分支名 branchName。

問題2:
如果還存在一個分支topic(圖中沒畫出來),當前分支是master,我希望合併hotfix和topic分支,但不合併到當前分支master,同時不切換分支,要求保持目前分支仍然是master,是否可以做到?
因為從指令的參數來看,可以接受多個 commits,manual中說,多個commit合併構成了一個章魚合併,我就在想多個commits合併,是不是必須合併到當前分支。於是就有了這個問題。

学习ing
学习ing

全部回覆 (2)
左手右手慢动作

使用cherry-pick挑選你要的投稿

    阿神

    首先,你這張圖畫得貌似有點問題,看不出來這兩個 branch 是從 哪裡分離的。你應該使用git cherry-pick指令,而不是merge。只能猜一下,是不是這樣?

    A - B - C hotfix / init - D - E - F - G master

    後面的回答都基於這個猜測。如果和你的不同,請評論指出。

    問題一:簡單來說,最好用cherry-pick
    首先你要知道,git merge git cherry-pick 是不同的。 。如果你要在這裡用git merge B,那就會得到這樣的結果:

    A - B - C hotfix / \ init-D-E-F-G-G' master

    但如果你是git cherry-pick B,就會得到這樣的結果:

    A - B - C hotfix / init - D - E - F - G - B' master

    merge有它的優點,因為每一次merge其實都是創造一個新的 "merge commit",而且會 "保留歷史",所以是一個 "non-destructive"(非破壞性)的過程。當然,cherry-pick也有它的缺點,首先是創建一個新的 hash,這可能會導致多人協作的混亂。例如有人已經在 G 後面又加了 HJKL,那至少他還要rebase一下。另外,這個 B' 也不會像merge那樣保留自己的歷史紀錄。因此,確切的說,這個 B' 更像是一個 patch。 (請參考git format-patchhttps://git-scm.com/docs/git-...

    我個人比較喜歡cherry-pickrebase這樣的指令,不太喜歡merge,最主要是因為歷史線簡潔很多。雖然這兩個命令比merge破壞性稍強,但稍微熟悉一點兒 git,知道每一步在做什麼以及可能造成什麼影響就好。


    問題二:
    感覺是不行的。merge不像rebase有類似--onto這樣的參數。還是切換過去再merge吧。

    你後面說到章魚合併,你說的是--strategy=octopus麼?不太確定這個 strategy 和你要問的有什麼關聯。 。因為多個branchmerge預設 strategy 就是 octopus。 。不用去專門設定。 。 。順便,對於單一 HEAD 的merge,預設 strategy 是 recursive。

    對於你說的多個 commits 合併,請詳細描述一下你的需求。或是畫個圖補充一下

      最新下載
      更多>
      網站特效
      網站源碼
      網站素材
      前端模板
      關於我們 免責聲明 Sitemap
      PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!