簡體   English   中英

Git:將功能分支與本地配置分支混合

[英]Git: Mix a feature branch with a local configuration branch

我正在開發一個開源項目,我想將我的更改貢獻給它。 我有兩個環境,我想在其上工作。 第一個是上游環境,另一個是我的生產環境。 我目前的做法是保留兩個獨立的分支機構; 一個功能分支包含我想要推回到上游的更改和一個本地配置分支,我需要更改我需要使軟件適應我的生產配置。 功能分支將有許多提交,但配置分支將只有一個提交。

我的問題是如何在環境之間來回切換。 我需要使用功能分支和本地配置分支進行開發,但是當我回到上游時,我不希望從本地配置分支進行提交。 我也不想通過恢復來污染我向上游的提交。

另一種提問方式是圖形化。 鑒於下面的圖片,我想使用c1 + f1..fN處理代碼,但是當我創建一個pull請求時,我不希望c1成為pull請求的一部分。 我不希望c1 +中的c1還原。

提交樹

我歷史上通過簡單地重寫歷史記錄來處理這個問題,以便在我合並上游的功能分支時刪除配置提交。 考慮一下:

S                     (starting point, whichever branch you're working off of)
S - A                 ('config' branch)
S - A - B - C - D - E ('feature' branch, based off 'config')

假設您小心沒有任何更改與A所做的更改沖突,您可以運行:

git checkout feature
git rebase -i {upstream remote}/{upstream branch}

並在上游合並您的更改之前從歷史記錄中刪除A

這讓你:

S - B' - C' - D' - E'

這應該為上游存儲庫提供一個干凈的拉取請求。

也就是說,不同的團隊對歷史重寫有不同的容忍度。 但是,如果你一個人工作,它的影響應該是非常小的。

用git(或任何VCS)解決這個問題的方法並不是很好。

使用git的最佳解決方案是在推送之前刪除提交,正如joshtkling在他的回答中解釋的那樣。

但是,有一些缺點:

  • 你必須小心不要有依賴於“config”提交的“功能”提交,否則你在刪除配置提交時會遇到沖突,這可能會變得混亂。
  • 每次推動時都必須記住刪除配置提交; 存在意外推送太多的風險(甚至可能甚至是配置提交中的密碼等東西?)。
  • 推送后,必須重新引入“config”提交,直到上游接受推送。
  • 最后,如果您想在本地使用多個分支,那么在它們之間進行合並將很困難,因為您必須在上面進行重新定位。

簡而言之,它將在簡單的情況下工作,但可能會變得痛苦。

我的建議: 嘗試更改應用程序,這樣就不需要“config”提交。

使您需要更改的內容可配置,因此您無需更改代碼。 恕我直言,如果您需要更改代碼(或上游提供的其他部分)以使軟件適應您的環境,這是一個不好的跡象 - 所以您的更改也可能對其他人有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM