[英]Reorganising git commits into different branches
我正在嘗試重新組織我的git樹,使其結構更好一些。 基本上,目前我有一個主分支,並從中拆分出幾個小功能分支。 我想返回並重新排序,以便主分支中唯一的提交是對應於新版本號的提交,然后將所有提交之間的所有操作都放在一個單獨的develop分支中,功能分支也從該分支中分離出來。 基本上,我正在尋找一種工具,可以完全手動重組樹。 我以為交互式重定基准可能正是我想要的,但是嘗試在sourcetree中這樣做似乎使它看起來不是正確的工具。
誰能給我一些有關如何最好地進行操作的建議。 下面是我當前結構的示意圖:
featureA x-x-x
/ \
master A-x-x-x-x-B-x-x-x-C D
所需結構:
feature x-x-x
/ |
develop x-x-x-x-x-x-x -
/ | | |
master A - B - C - D
具有線性歷史記錄(例如您當前的結構)是許多人想要的東西。 如果您真的想嘗試這個新的工作流程,那么從現在開始采用它而不改變過去呢? 這將為您省去一些麻煩。
但是,如果您確實要更改它,則可以執行以下操作:
#Start to put tags on 'main' commits, to ease manipulations
git checkout B
git tag tagB
git checkout B
git tag tagB
git checkout D
git tag tagD
#Start to rewrite from the oldest
#Not much to do: we just need to add a merge commit
git checkout A
git merge --no-ff B
git branch -f master
#Continue with C
#Same thing, but we need to cherry-pick the intermediate commits
git checkout tagB
git cherry-pick C~3
git cherry-pick C~2
git cherry-pick C~1
git cherry-pick C
git merge --no-ff master
git branch -f master
#Continue with D
...
為了簡化這些操作並確保您知道發生了什么,您應該在后台打開一個gitk --all HEAD
,並定期按F5
刷新它。
如果您認為自己搞砸了,並且想要檢索初始狀態,則只需執行以下操作
git checkout tagD
git branch -f master
最后一句話:如果您已經共享了這些提交(例如,如果您已經推送了),則應該警告可能擁有它們的所有人,這將改變歷史的結構。 否則可能導致真正的混亂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.