簡體   English   中英

Git:我有一個80多次提交的功能分支。如何在不破壞歷史的情況下將其安全地合並到開發/生產中?

[英]Git: I've a feature branch with 80+ commits. How can I safely merge it into develop/production without ruining the history?

我已經在一個功能部門工作了幾個星期,並且有大約80個提交的歷史,涉及我們項目的許多部分的工作。 對於小功能,我只需要重新定義,將提交壓縮成一個簡潔的提交,合並它以進行開發,然后推送它。 但在這里,我已經積累了很長的歷史,承諾涉及許多不同的部分。

我想將它們拆分成較小的提交,即“功能F的完成部分A”“完成部分B”等等,但是工作不是線性的,並且每個部分都是同時建立的。

我可以將它們全部壓縮成一個提交並推送它,但是我會失去所有的歷史記錄,它可能會使調試在未來變得很痛苦,因為它是如此大的變化。

我不熟悉在專業環境中使用git,所以我不確定最佳實踐。 你對這種情況有什么看法?

一般的方法是

  1. 拆分混合功能提交
  2. 重新排序提交

我假設您的存儲庫看起來像這樣

o--------o----------o----------o
A        B          C          D

並且您的功能更改是混合和分發的

- feature 1 changes are in A,B,C
- feature 2 changes are in A,C,D
- feature 3 changes are in B,C,D

拆分提交

如果要對每個要素進行更改,必須首先拆分提交。

$ git rebase -i HEAD~3

這將打開一個編輯器

pick A ...
pick B ...
pick C ...
pick D ...

由於您需要編輯每個提交更改它

edit A ...
edit B ...
edit C ...
edit D ...

保存並退出編輯器,git將開始rebase。 Git會重新定義A並暫停讓你進行編輯。 現在,您可以重置提交A並進行新提交,以反映每個功能更改。

$ git reset HEAD~
$ git add ... # only files of feature A
$ git commit -m 'Feature A'
$ git add ... # only files of feature B
$ git commit -m 'Feature B'
$ git add ... # only files of feature C
$ git commit -m 'Feature B'
$ git rebase --continue

Git繼續,您必須一次又一次地重復上述示例,直到所有提交被拆分為止。 您的存儲庫看起來不像

o---o---o---o---o---o---o---o---o
E   F   G   H   I   J   K   L   M

另請參見將先前的提交分解為多個提交

重新排序提交

目前,您只需在一次提交中對一個功能進行所有更改。 但它們不是一個線性順序:

  • 特征1的變化在E,G,I中
  • 特征2的變化在F,J,L中
  • 特征3的變化是H,K,M

現在你可以做另一個rebase -i並重新排序提交。

pick E
pick G
pick I
pick F
pick J
pick L
pick H
pick K
pick M

保存並退出rebase交互式編輯器,git將重新排序提交。 您可能會遇到必須解決的合並沖突。 提交將被重新排序,因此它們可能與現在的早期提交沖突。

希望git rebase完成沒有任何沖突,你最終會得到這個存儲庫

 o---o---o---o---o---o---o---o---o
 N   O   P   Q   R   S   T   U   V

|         | |         | |         |
+---------+ +---------+ +---------+
 feature 1   feature 2   feature 3

暫無
暫無

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

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