[英]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”提交。
使您需要更改的內容可配置,因此您無需更改代碼。 恕我直言,如果您需要更改代碼(或上游提供的其他部分)以使軟件適應您的環境,這是一個不好的跡象 - 所以您的更改也可能對其他人有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.