2017-06-22 84 views
0

我正在使用Laravel項目並使用git-flow來管理我的更改。我的develop分支是兩個提交前的功能分支我最近完成了名爲功能/註冊驗證碼。我想將這個特性分支合併到develop分支中。如何解決與composer.lock使用git流的合併衝突?

enter image description here

最近提交我做這已經被合併到開發分公司只需運行composer update更新包,其中有一個bug在裏面。所以,composer.lock文件當然已被修改。

功能/註冊驗證碼功能分支包括添加驗證碼包和驗證碼UI到註冊頁面。所以,這也修改了composer.lock文件。

當坐在特性分支我曾嘗試合併提交,從源代碼樹,通過選擇庫> Git的流量>完成功能,然後在完成功能選擇下列選項彈出:

enter image description here

我則以下消息介紹:

enter image description here

這會導致composer.lock文件中存在需要解析的合併衝突。我認爲最好的方法是刪除composer.lock並通過運行composer updatecomposer update --lock創建一個新的更新副本,添加unstaged composer.lock文件並提交更改。這樣做了以後我提交這個樣子:

enter image description here

當在命令行中運行git status我出以下幾點:

c:\my-project (HEAD detached at 2a9ff12) 
λ git status 
rebase in progress; onto 3070450 
You are currently rebasing branch 'feature/registration-captcha' on '3070450'. 
    (all conflicts fixed: run "git rebase --continue") 

nothing to commit, working directory clean 

因此,我認爲做正確的事情是運行git rebase --continue ,之後我收到以下消息:

c:\my-project (HEAD detached at 2a9ff12) 
λ git rebase --continue 
Applying: add non captcha to registration page 
No changes - did you forget to use 'git add'? 
If there is nothing left to stage, chances are that something else 
already introduced the same changes; you might want to skip this patch. 

When you have resolved this problem, run "git rebase --continue". 
If you prefer to skip this patch, run "git rebase --skip" instead. 
To check out the original branch and stop rebasing, run "git rebase --abort". 

如果我運行git status再次顯示與上次運行git status相同的消息。

所以我現在想知道:

  • 那我在這裏做,完成變基/合併嗎?
  • 我是不是全都做錯了?
  • 我應該如何處理更新軟件包時可能產生的衝突?

任何幫助將不勝感激,謝謝!

+0

你不應該刪除composer.lock,並在這種情況下做一個作曲家更新 - 從來沒有!合併衝突是有原因的。在你的方法中,你現在更新了比你想要的更多的包。在這些情況下最簡單的方法就是接受外國的composer.lock,扔掉你的版本。那麼你需要記住你在分支中更新了哪些軟件包(pro-tip:爲你的更新語句創建一個git commit並在註釋中寫入語句)並明確運行作曲者更新。與親技巧這一步可以自動化 –

回答

2

我是不是全都做錯了?

由於git在工作流程方面非常靈活,總有不止一種方法可以做到這一點。 ;)

在這個特定情況下出現了什麼問題 - 如果我正確理解了您的操作順序 - 是您在合併完成之前開始了重新綁定,因爲您想用它來解決合併衝突。這就是你如何結束獨立的頭部狀態。

我是否應該以不同的方式更新軟件包時可能出現的衝突?

如果遇到合併衝突,則處於開始合併但尚未完成的狀態。它可以被中止(但沒有合併)或完成(解決衝突和提交更改)。

With composer.lock我會首先嚐試手動解決合併衝突,因爲衝突應該非常明顯:一些軟件包已更新,另一個已添加 - 衝突可能是雙方都改變了幾行。 composer.lock是JSON格式的文件,因爲您有兩個可用分支的正確工作版本,應該很容易修復。也許SourceTree在這裏提供了一個衝突解決工具(我不使用它),但是這也可以在文本編輯器(git marks the conflicting blocks)中或者使用MeldVimDiff等工具(可以調用git mergetool)並向您呈現3或4個文本窗口:來自兩個分支的版本,具有當前狀態的衝突解決窗口(在這裏您進行更改)和(可選)兩個分支的基本版本以及並行比較。保存它,測試它(composer install應告訴你composer.lock文件或composer validate是否有問題)。然後添加並提交 - git仍然知道提交屬於合併。

在這種特定情況下(文件不是手動編輯,但是由程序員編輯,而且您知道兩個分支上都做了什麼),解決衝突的另一種方法是:當您處於合併中時,出現衝突,簽出開發composer.lock(只是這個文件),並運行你的composer命令,添加新的包,就像你在分支中添加和添加一樣。結果就像您按順序運行更新和軟件包添加一樣。

我應該在這裏做什麼來完成rebase/merge?如果變基仍是

  • git rebase --abort

如果沒有其他變化出現在你的WORKDIR或分離的頭,發展也仍然在描述中的狀態,我會合並重新開始正在進行

  • git merge --abort如果合併仍在進行
  • 結賬開發
  • 合併特性分支再次
  • 以上述方式之一解決衝突
  • 提交合並(包括衝突解決更改),推送等
  • +0

    感謝您的詳細解答。 composer.lock中的衝突約有28行左右,日期不同,基本上是該軟件包的最新版本與舊版本,我在所有情況下都選擇了最新版本。我進行了合併,但似乎無法與rebase一起取得進展,因此最終做了rebase skip。仍然有點困惑,爲什麼會發生。 – haakym

    +0

    在這種情況下,您不需要rebase,因爲您將兩個分支合併在一起。我會澄清答案。 –