我是個初學者,但我一直連最簡單的合併都做不好,一直以來我有個問題是想要將同事寫的與我寫的合併在一起。其實這個問題我在網路上問了兩次,結果兩次都領悟不出來網友說的merge觀念...慚愧..,終於...今天我像是被電到一樣突然想通了,其實道理也是很簡單--branch的parent一定要同一個(分支要由同一條主線分出來就對了!),此方法適合與未使用git的人合併專案。
作法:
由master分支出來兩條線分別是develop1及develop2,分別開發後,再由master去merge develop1、 merge develop2 。就這麼簡單...如果有份檔案都有被develop1及develop2改過
(譬如說有個.txt檔,develop1裡的內容修改為123;但是develop2修改內容為456),就會產生conflict,這時再開檔案修改你要的結果)
千萬不要這麼merge,否則你就會犯我犯過的錯誤:
假設你要與同事合併,你千萬不要將你開發完後的develop合併回主線(master),再開分支others(此分支會是最新版的master,接下來的合併就沒意義了),將同事的檔案覆蓋上去,然候再合併回主線,會發生合併後的檔案完完全全的是你同事的檔案,你的修改檔案都不見了。
正確作法應該是:
假設你要與同事合併,你目前的develop不要動(也就是不要合併回主線,不要讓主線為你的最新版本),切到主線並且開一條分支others,將你同事的檔案覆蓋上去,然候回主線(master),分別merge develop(你的)及merge others(他的),這時有共同檔案被修改過(也就是前面舉的.txt檔的例子),就會產生conflict,如果你與他有額外新增的檔案,都會共同地存在。
實作練習:
課前提示:
目前位置 : master
檔案 : t1.txt t2.txt t3.txt
操作說明 : 別管虛線,那是為了方便區別正在做的步驟而已,只要照著指令順序做完它:)
開始你的開發 :
-------------------------------------------------------------------------你的檔案↓----
git checkout -b develop 新增一個分支
↓(修改了t1 t2 t3內容並增加了t4.txt)
git add .
git commit -a -m "develop OK" 放進stage並且commit
↓(如果要與同事做好的檔案合併(假設同事未使用GIT)
-------------------------------------------------------------------------你的檔案↑----
-------------------------------------------------------------------------他的檔案↓----
git checkout master 切到主線
git checkout -b others 新增一條同事的分支(這時候的檔案是master的t1 t2 t3,跟develop剛修改的完全沒有關係)
↓(修改檔案(修改了t1 t2 t3內容並增加了t5.txt)
git add .
git commit -a -m "others OK" 放進stage並且commit
-------------------------------------------------------------------------他的檔案↑----
-------------------------------------------------------------------------合併你跟他的檔案↓---
git checkout master 切回主線
git merge develop 合併develop,這時master的資料全是develop的了
git merge others 再合併others,這時候因為develop跟others同時有修改t1 t2 t3的檔案,所以產生了conflict,但是develop新增t4與others新增的t5因為沒有重覆到,所以不影響它們
↓(修改t1 t2 t3產生的conflict,打開這三個檔案修改成你要的結果)
git add .
git commit -a -m "merge OK" 放進stage並且commit
↓
結束,打完收工。
(這時候master的檔案是修改conflict後的t1、t2、t3及develop的t4與others的t5)
註 : 產生的conflict
-------------------------------------------------------------------------合併你跟他的檔案↑---
合併完後刪除develop及others,然候再建一條新的develop繼續開發
---
沒有留言:
張貼留言