2012-01-28 38 views
1

我是GIT的新手,對於適當的工作流程感到好奇(這是我第一次使用Clearcase的第二個SCM)。讓我們假設有2個的Git分支:Master & FoobarGIT Noob - 我如何防止意外合併?

John編輯一個文件,hello.txt,他的更改必須只在Foobar分支上。 John檢查出Foobar分支,進行修改並提交。

簡現在需要更改爲hello.txt需要在Master & Foobar分支。她檢查出Foobar分支,讓她改變並提交。然後,她檢查出Master分支,並從Foobar分支中提取文件。但是,她現在不恰當地將約翰的變更合併爲Master

怎樣才能避免這種情況呢?在Clearcase世界中,創建合併箭頭以確保他的更改不會合併到Master是約翰的責任。 GIT中有類似的東西嗎?或者有更好的工作流程嗎?

+0

你可以做出改變的'master'的,然後合併高手'foobar'(如果你是罰款主傳播到其他foobar的變化) – knittl 2012-01-28 15:21:53

+0

不幸的是,沒有。有一些變化需要專門針對Master ...一些需要針對Foobar的變化......以及一些需要隨處可見的變化。 – user1175330 2012-01-28 15:33:19

回答

1

有沒有這樣的事情在git的合併箭頭。

這聽起來像Foobar的是分支,其中的變化是由不應該去掌握。如果是這樣的話,Jane應該已經開始了她的主人的工作,並將其合併到Foobar中。

+0

難道我們不會遇到同樣的問題嗎?如果簡從師父開始並將其合併到Foobar中,她將如何不合並其他不應該在Foobar中的變化? – user1175330 2012-01-28 15:35:18

+0

@ user1175330真的沒有辦法。 Git實際上並沒有「僅在此分支中保留此文件」的概念。 – JaredPar 2012-01-28 15:44:51

2

如果你在分支A上,並且想要在分支B上提交的更改,你想要的是櫻桃挑選那些更改。見Google: git cherry pick

如果你這樣做git pull B,你剛剛合併B插入A;這是你想要避免的。但幸運的是,取消合併比執行合併更容易。如果它沒有被推到任何地方,你所要做的就是將A的頭部重置爲合併之前的提交。

+0

謝謝丹。櫻桃採摘看起來很有前途,因爲看起來我可以挑選某些提交。但同時,這似乎是無效的,因爲從這一點來看,約翰和簡必須總是選櫻桃,以確保約翰原來的變化不會變成主。正確? – user1175330 2012-01-28 15:39:53

+1

'git cherry-pick'就是答案。真正的問題是你應該定義一個工作流程。常用的方法:(1)掌握當前版本和bug修復,(2)新功能分支,(3)下一個合併功能分支,最終合併到新版本的主控。 – hughdbrown 2012-01-28 16:09:43