@邁克爾的答案是好東西,如果你的提交是單功能提交,不提供任何其他功能的提交依賴關係。但是,如果您在任何提交中混合使用了這兩個功能,則需要interactive rebase。它允許您任意重新分配變化區塊並提交邊界,並且它可以跟蹤哪些區塊尚未提交給當前分支。
如果功能更改有時會合併爲提交併且沒有交叉功能依賴關係,爲了讓生活更輕鬆,我的第一次嘗試是git rebase -i master prototype
,將混合區域提交拆分爲兩個提交,每個提交一個,然後像邁克爾的回答那樣結束櫻桃選擇。鑑於
A1-B2-C12-D2-E1-F12 prototype
,其中數字表示該功能(S)的承諾中包含的代碼,用於`git的重訂-i主原型你編輯提交C12和F12,
pick A1
pick B2
edit C12
pick D2
pick E1
edit F12
(使用每提交的哈希,而不是它的說明標籤在這裏)。
犯C12
衍合後會停止,您可以git reset HEAD~
然後git add --patch
應用所有功能-1帥哥,git commit --amend
創建提交C1
在C12
之地位,然後git add -A; git commit`` to apply all the remaining hunks and create commit
C2`跟隨它。你會以
A1-B1-C1-C2-D2-E1-F1-F2
然後你可以git checkout -b feature1 master; git cherry-pick A1 B1 C1 E1 F1
和類似的功能2。
在更復雜的情況下,這種方法仍然作品只有非常輕微的變化。互動變基大大優於上述可能導致你相信,但迄今爲止最好的方式來了解這是當你在那裏得到和爭搶一些帥哥的樂趣坐下來與the manpage。做到這一點,它可能很快就會到達這樣一個地步:作爲預先發布儀式做這件事通常足夠比試圖讓您的實際工作流程在每一個小步驟都可以發佈更爲方便。
我們實際上已經拿出摘櫻桃以及在這裏討論的時候,我會嘗試。 – JoeB 2014-10-30 17:27:39
如果沒有提交任何更改,是否有辦法做到這一點? – Michael 2018-02-06 20:31:17
創建一個新的分支,使用'git的添加--patch'添加想要有變化,這個分支(+'git的add'新文件),提交,藏匿剩餘的變更,籤一個新的分支基於主('git checkout -b feature_2 master'),添加並提交您的更改。 – Michael 2018-02-07 09:40:10