2010-06-12 189 views
9

我15歲,剛剛開始使用源代碼管理系統來更好地管理我的代碼,所以我對這個東西有點新。現在我有這個資源庫:git合併重新提交提交到另一個提交?

[a]---[b]---[d]---[f] master 
     \ 
     \ 
      [c]---[e] develop 

我想在這裏結束了:

[a]---[b]---[d]---[f]---[g] master 
     \    /
     \   /
      [c]---[e]---/  develop 

其中g相當於執行承諾[c][e][f]。這是git checkout master; git merge develop,對吧?

+2

15年前使用Git,真棒!+1 – zengr 2010-06-12 17:57:12

回答

1

你想要git checkout master; git merge develop

這是因爲git merge將您想要合併的分支的名稱放入當前檢出的分支。因此,你簽出你想要的目標分支(主),然後合併另一個分支(開發)。

如果您在git-merge man page的第一個「描述」部分查看,您會看到一個與您的描述幾乎相同的圖表(儘管垂直翻轉)描述了這一點。

0

這是git checkout master去'主'分支,然後git merge develop將'develop'分支合併到當前'master'分支。

6

您提取的圖片看起來像git merge的結果,但您對描述的內容聽起來像是git rebase。從Git的社區書"Rebasing" chapter

借款,如果你在mywork分支,並說

$ git merge origin

你會得到

git merge history

將合併視爲的將兩張不同的快照拼湊在一起:在這種情況下,C4和C6一起製作C7。

Rebase創建一棵看起來像C7一樣的樹,但其歷史看起來完全不同。再說,而不是合併,你給的命令

$ git rebase origin

你會得到

alt text

當你發現自己希望,「我真希望我能在C4創建的mywork分支,而不是的C2,'git rebase是djinni,將授予它。

你也可以把rebase看作是將歷史中的一個分支切割出來,然後將它移植到另一個點上。不要錯過從C5和C6到C5'和C6'的微妙變化。雖然樹木看起來一樣,但他們會有不同的父母,從而改變他們的git身份。

+0

假設沒有兩次提交觸及相同的文件。無論你是合併還是重組,你都會得到相同的結果,對吧? – wxyz 2010-06-12 19:42:10

+0

@wxyz是的,生成的樹會相同,但它們的歷史將如上所示有所不同。使用'git rebase'可以幫助保持你的歷史線性。 – 2010-06-12 20:23:31