[英]How to rewrite git history to combine commits?
我一直在嘗試使用Google,但我認為我有一個特殊情況,我不知道是否有辦法做到這一點。
我在master
分支中啟動了一個項目,當它足夠穩定時,將其復制到staging
分支中。 不久之后,我決定從master
創建一個dev
分支。 現在,我正在研究CI構建服務,並且正在研究試圖正確構建我的staging
分支的代碼。 因此,現在我的暫存分支比我的dev
分支(oops)提前31個提交,但值得注意的是每個分支都是其自己的環境,在執行此分支之前,我沒有忽略某些配置文件。 因此,我有一些我不想覆蓋的文件,這就是為什么我要告訴Git / Bitbucket之類的東西,例如“ Dev,Staging和Master在它們應該在的位置,並且我們將從現在開始跟蹤每次提交...忘記過去。 “有沒有辦法做到這一點?
我研究了git rebase,但由於我要處理的合並的提交數量眾多,這令人困惑。
如果分支上的提交很少 ,則可以使用git rebase -i --root
分支上的提交。
如果branch上有大量提交 ,則最好使用以下方法來壓縮提交:
假定提交歷史如下:
S1---S2---…---S31 staging
/
A---B---…---X dev
\
P1---P2---P3---P4---P5 production
在staging
和production
分支上的提交的第一個壁球部分,它領先於dev
分支:
git checkout -b temp dev
git merge production --squash
git branch -f production
git checkout -B temp dev
git merge staging --squash
git branch -f staging
現在的提交歷史將是:
S staging, temp
/
A---B---…---X dev
\
P production
如果需要,可以通過git branch -D temp
刪除temp分支,然后通過git push -f --all
推送到remote。
如果仍然需要壓榨dev
, staging
和production
分支的提交,則可以通過以下命令繼續壓榨:
git checkout -B temp <commit id for A>
git merge production --squash
git branch -f production
git checkout -B temp <commit id for A>
git merge staging --squash
git branch -f staging
git checkout -B temp <commit id for A>
git merge dev --squash
git branch -f dev
git branch -D temp
git push -f --all
現在的提交歷史將是:
S' staging
/
A---X' dev
\
P' production
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.