我有一個 git 存盤庫,其中包含來自上游源的多個檔案。我對這些檔案進行了一些本地修改,但它們與上游版本基本相同,我希望能夠與上游版本保持同步。我不需要上游歷史記錄,但如果有新版本,我希望能夠將其合并,同時仍保留我自己的更改。因此,這并不像將上游檔案復制到我的存盤庫中那么簡單,因為這會導致我的更改丟失,并且手動運行vimdiff或類似的操作來確保添加我的更改是一件非常痛苦的事情。
現在我找到了一個看起來像這樣的解決方案:
- 創建一個完全空的孤兒分支(稱之為
upstream) - 將上游檔案添加到此分支(因此它們是其中唯一的內容)
- 合并
upstream到我的主分支,通過--allow-unrelated-histories - 將我的更改應用到檔案并提交
現在我應該能夠引入更改upstream并繼續合并它,同時保持我的更改完整。它似乎作業,但感覺hacky。這個問題有更合適的解決方案嗎?
編輯:
這是一個模擬我正在做的事情的場景:有一個只有頭檔案的 C 庫可供下載。它不在 Git 存盤庫中,它只是一個定期更新的裸檔案。我正在使用該檔案,但我對其進行了一些本地更改。我希望能夠跟蹤未來下載的變化,同時仍保持我的(必要時解決沖突)更改檔案。我想要我的存盤庫的檔案部分,所以我不想讓下載和修補成為構建程序的一部分。我更喜歡使用 Git 進行合并/沖突解決。
uj5u.com熱心網友回復:
也許因為在你的 repo 中有一個持久的不相關分支,所以感覺很糟糕。盡管它(以我的經驗)不正常,但它很好地代表了您要實作的目標(具有第三方關系而不依賴于單獨的存盤庫)。鑒于此,我認為您提出的解決方案沒有問題。不過有一些注意事項:
- 您應該只需要
--allow-unrelated-histories第一次使用,因為從那時起它們將是相關的。 - 您不必在每次合并時都“應用您的更改”。相反,如果有的話,它將是“解決沖突”。最初的合并可能是最復雜的,但之后它應該會更簡單,甚至可能是自動的。
假設是每次您希望更新第三方檔案時,切換到upstream分支,放入檔案,提交描述檔案版本和/或日期的訊息,然后切換回您的作業分支并合并upstream并解決任何沖突。這很干凈,恕我直言。
可選調整:在較大的存盤庫中,切換到空分支可能會很耗時,因為它必須洗掉存盤庫中的所有檔案,然后在切換回作業分支時重新寫入所有檔案。另一種選擇是,不是在同一個 repo 中放置一個孤立的空分支,而是將該分支放在一個單獨的本地小型 repo 中,它模仿相關檔案的目錄結構。在這種情況下,您可以只有一個名為“main”的upstream分支來模擬您提議的解決方案中的分支。然后在您的主存盤庫中,您可以為該本地存盤庫設定一個輔助遠程(可能稱為“上游”),從中獲取,然后合并upstream/main進入你的作業分支。這也可以解決黑客問題,但它確實違反了您依賴另一個 repo 的約束。至少在這種情況下,該回購是您自己的。
uj5u.com熱心網友回復:
Gitrebase命令實際上就是為此目的而制作的。
假設您有一個包含本地更改的分支,名為mybranch.
假設存在新更改的遠程分支稱為master(或main)。
因此,如果您想將遠程master分支的所有更改都包含到您的分支中,同時將您的更改保留在它之上,首先,請確保您在當前分支 ( mybranch) 上并像這樣重新設定它的基礎:
git rebase master
有關rebase如何作業的更多資訊,請參閱本文。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/354948.html
標籤:混帐
