簡體   English   中英

如何在 Git 中的多個分支中進行並行開發和“小”合並

[英]How to carry out parallel development and 'small' merges in multiple branches in Git

我們有一個主分支m ,其中我們有一個線性歷史並合並到通常相對較短的特征分支F1F2 ,......像這樣:

*   343b52f - (11 days ago) Merge branch 'F495' into 'master' - Torque
|\
| * 52fc5a2 - (11 days ago) Add various QOL tools to make working inside Docker more convenient - Torque
|/
*   1eaa8df - (2 weeks ago) Merge branch 'F494' into 'master' - Boss
|\
| * 9758e64 - (2 weeks ago) Use company-php-commons as source for custom DQL functions - Boss
| * 2c8ee88 - (2 weeks ago) Upgrade to latest company-php-commons (for custom DQL functions) - Boss
|/
*   a1d7acc - (3 weeks ago) Merge branch 'F493' into 'master' - Coworker
|\
| * 149ead1 - (3 weeks ago) Update: Device Amount Calculation - Coworker
|/
*   f69c844 - (3 weeks ago) Merge branch 'F492' into 'master' - Torque
[...]

功能分支並不總是這么短。 我不想讓帖子膨脹太多。 現在,我們正在計划一個新的、長期存在的分支來實現更好的調試日志記錄, LD 在那個分支中,我們將把改進日志記錄的提交放到我們現有的代碼庫中,我們不想每隔一天將它合並到 master 中,而是在考慮完成后合並它。

我們希望在未來的功能分支LD Fn+1中從這些更改中獲利(僅在開發期間!),但我們不太了解如何 - 一旦我們想要合並Fn+1進入 master m ,我看不到LD提交如何不會過早進入m

有沒有辦法“臨時”將LD合並到Fn+1中,並在我們將Fn+1合並到m之前“取消合並” LD 由於LD僅包含核心產品中的代碼,而Fn+1將幾乎完全包含(記錄)隔離類中的代碼,我們不希望看到合並沖突和/或代碼路徑沖突,或者至少很少看到。

開發新功能 -

結帳最新LD

git checkout LD

創建一個新的功能分支:

git checkout -b f500

在功能分支中做一些事情:

git add ...
git commit ...
git add ...
git commit ...

現在您想在 master 中進行這些更改,請執行 rebase:

git rebase --onto m LD

這將“移動”您的f500分支,就好像它從 master 分支一樣。

但是請注意,如果您的任何 f500 代碼依賴於LD相關代碼,它將無法正常工作,因為LD代碼不在 master 中,因此請確保您從未實際提交LD相關代碼

最簡單的方法是設法以某種方式提交 master 中的代碼。

您仍然可以將其從生產版本中排除; 根據您使用的語言,您可以:

  • 從您的發行版debuglogger中明確排除目錄調試記錄器
  • 編譯代碼時明確排除 class DebugLogger的代碼
  • ...

一種駭人聽聞的方式:

project/
├── .git
├── debuglogger    # version debuglogger in a separate repo
│   ├── .git       # and clone it locally on the developers' laptops
│   └── sourcefile
├── dir1
├── dir2
├── sourcefile1
├── sourcefile2
...

如果您在工作機器上克隆debuglogger器:

  • 從主項目運行git命令將完全忽略此子目錄
  • 您必須在項目的代碼中添加一個開關,如果可能的話,包括來自debuglogger的代碼,例如:
    • 如果env = dev ,包括debuglogger
    • 如果DebugLogger class 可用,則加載它
    • 如果debuglogger/存在,請將其包含在編譯腳本中
    • ...

當您認為您的功能准備就緒時,您可以將其作為單個提交或導入其歷史記錄(例如使用git subtree )包含在您的主項目中。

此設置的 hacky 部分是:它打破了git的一般想法,即“提交應該代表整個項目”

暫無
暫無

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

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