[英]Rewriting history after merging feature branch into master
在我正在進行的個人項目中,我遇到以下情況-
N' <-- mainscreen
/
| N--O--P--Q <-- database
|/
A---B---C---D---------------------M <-- master
\ /
F--G--H--I--J--K--L <-- loginscreen
現在,盡管我對git有一些基本的經驗,但是我從不了解任何良好的git實踐,也從未從事過一個大型復雜項目,在此之前,我的技能一直處於停滯狀態。 因此,我決定適當地學習它,並遵循此項目的一些良好做法。 快速搜索使我想到了這一點 ,我認為從所有對其的引用中,它是一個受歡迎的模型。
閱讀完這篇文章后,我意識到由於我的提交中缺乏計划, loginscreen
分支中的某些代碼實際上是其他分支中所需的通用代碼,因此應分開存放。 因此,我決定重寫分支的歷史記錄,以便將通用代碼分離到一個新的develop
分支中。 我發現可以使用交互式重定基礎來拆分提交,但是我不確定在這里是否可行,因為我已經將loginscreen
合並到了主loginscreen
(這可能是個壞主意)。 基本上我想做的是-
develop
loginscreen
相關的代碼在其自己的分支中,而通用代碼在develop
loginscreen
合並到develop
develop
分支上重新develop
database
和mainscreen
分支 結果應該是這樣的-
A-----------------------M----------- <-- master
\ | N--O--P--Q <-- database
\ |/
B---C---D---G--I--K--L <-- develop
\ / \
F---H---J \ <-- loginscreen
\
N` <-- mainscreen
(G, I, K commits contain the common code)
就像我說的那樣,這是一個個人項目,尚未得到推動,因此重寫歷史記錄不會有任何問題。 但這有可能嗎?
我可以輕松地解決這個問題。 所有我需要做的就是創建一個名為新的分支develop
的初始提交,然后櫻桃采摘B,C和D.然后我創建了一個新的分支loginscreen
承諾和櫻桃采摘,分離文件,合並分支機構和解決必要時合並沖突。 所有這些都導致了這樣的狀態-
A---------------------------------- <-- master
\
\
B---C---D--G--I--K--L--------------Q <-- develop
\ \ / \ /
F---H---J M--N--O--P <-- loginscreen
之后,添加mainscreen
和database
分支很簡單, mainscreen
將提交提交到各自的develop
分支即可。
請記住,這將更改提交時間戳,有時還會更改作者時間戳(發生沖突時)。 我沒有理會提交者,但是可以使用git commit --amend --date
更改作者時間戳。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.