我有一個有趣的問題(至少對我而言。)
我有一個master分行和一個feature分行,它從master前不久就分道揚鑣了。另一個團隊不斷更新master分支,而我的團隊只在feature分支上作業。
該master分支包括了一些變化,我的團隊不感興趣,我們只關心自己的app檔案夾,就是這樣。即使在app檔案夾中,我們也不對所有內容感興趣,只對我們認為需要的更改感興趣。我們不會將我們的feature分支合并到他們中,master因為我們正在實施技術堆疊更改,我們唯一需要的是他們的 JavaScript 代碼。
同時,我們也在feature分支的app檔案夾中進行更改。所以在app檔案夾中,他們有一些我們沒有的更改,我們有一些他們沒有的更改。我們想保留我們所有的更改,但只選擇其中的一些更改。
我怎樣才能將他們master分支的app檔案夾合并到我們feature分支的app檔案夾中?我已經研究了幾個小時,嘗試了一些 VS Code 擴展來預覽兩個檔案夾之間的差異。我正在尋找的是一個界面,我可以在其中接受或拒絕來自master分支的“app”檔案夾的所有內容。盡管這是我的偏好,但我愿意接受任何可以解決此問題的建議。
這聽起來像是一團糟,但我的團隊在過去幾個月失去了一些成員,而且每個分支之間的差異每周都越來越大。現在我們想一勞永逸地解決這個問題。
謝謝你的幫助。
uj5u.com熱心網友回復:
我正在尋找的是一個界面,我可以在其中接受或拒絕來自主分支
app檔案夾的所有內容
git checkout -p master app 很粗糙,但很有可能在這里服務。
如果這還不足以讓你決定你想要什么,下一步是選擇性合并
git diff --merge-base @ master -- app | git apply -3
這將使用 Git 的自動合并機制,并留下任何重疊或鄰接的更改,讓您像往常一樣整理,或者您可以將差異保存到檔案中,并在應用它之前對其進行編輯以適應口味,如果您小心的話。
uj5u.com熱心網友回復:
有兩種方法可以做到這一點。更簡單的將保留更改,但丟棄他們所做的任何提交。更復雜的將保留提交。
推薦
下面討論的兩種方法都有可能導致合并沖突和其他令人頭疼的問題,尤其是當人們繼續在 master 分支上進行更改時。此外,如果您對功能分支中的 app/ 檔案夾進行了更改,直接使用 git apply 可能會導致您的更改被覆寫。
我會強烈建議通過合并主分支到功能分支git merge與沒有擠壓。鑒于您提到的分歧,可能存在合并沖突,但這是可以的。合并沖突做你想做的:它們讓你選擇接受哪些更改,拒絕哪些更改。
話雖如此,這里有兩種類似于僅挑選單個檔案夾的方法。
選項 1:放棄提交,保留更改
這種做法是非常直接的,它使用的組合git diff和git apply:
git switch feature
git diff feature..master -- app | git apply --index
這會:
- 切換到功能分支(這是您將應用更改的地方)
- 獲取對主分支所做的所有更改,這些更改不在功能分支上。
- 僅過濾
app目錄中的更改 - 通過應用更改
git apply - 通過將更改添加到索引來暫存更改(這是該
--index選項的作用)
這種方法的唯一缺點是它不會保留歷史記錄或提交訊息。
從那里,您可以自己提交更改:
git commit -m "Apply changes made to master branch"
選項 2:同時獲取提交和更改
這個有點復雜,它依賴于git format-patch.
git switch feature
git format-patch --stdout feature..master -- app | git am
這會:
- 切換到功能分支(您將在其中應用更改)
- 獲取對主分支所做的所有更改,這些更改不在功能分支上
- 僅按
app目錄中所做的更改過濾 - 將這些格式化為一系列補丁(包含提交訊息、作者等)
- 使用 git am 應用所有這些補丁
請注意,根據更改的內容,這可能會導致您必須手動解決的故障。(它會提醒你這一點)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/368854.html
