簡體   English   中英

如何重寫git歷史記錄以合並提交?

[英]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,但由於我要處理的合並的提交數量眾多,這令人困惑。

Bitbucket的屏幕截圖 在此處輸入圖片說明

如果分支上的提交很少 ,則可以使用git rebase -i --root分支上的提交。

如果branch上有大量提交 ,則最好使用以下方法來壓縮提交:

假定提交歷史如下:

              S1---S2---…---S31  staging
             /
A---B---…---X  dev
             \
              P1---P2---P3---P4---P5  production

stagingproduction分支上的提交的第一個壁球部分,它領先於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。

如果仍然需要壓榨devstagingproduction分支的提交,則可以通過以下命令繼續壓榨:

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.

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