[英]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,所以我不確定最佳實踐。 你對這種情況有什么看法?
一般的方法是
我假設您的存儲庫看起來像這樣
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
另請參見將先前的提交分解為多個提交
重新排序提交
目前,您只需在一次提交中對一個功能進行所有更改。 但它們不是一個線性順序:
現在你可以做另一個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.