2017-02-10 26 views
2

對不起,如果有一個重複的地方,我淹沒了一大堆技巧來改變提交消息(這並沒有幫助我),當尋找一個解決方案。在同一個文件中可以改變分裂到git中的不同提交?

我有兩套變化的應該是一個承諾每個一部分。不幸的是,我在早上開始了第二次換班,沒有注意到我忘記了在晚上之前犯下第一次換班。

在大多數情況下,它們會影響不同的文件。但是,有一個文件包含一個文件,其中包含兩個變更集的更改,如果在沒有第二個變更集的情況下進行推送,則該文件將被破壞。太糟糕了,我想在一個單獨的分支上工作,直到功能。

可悲的是,我已經承諾(未按下)第一變更和創建工作分支在它的上面時,我注意到,有包含兩個更改的文件。

有沒有辦法編輯我的提交,以便我可以提取影響變更集2的更改?在文本編輯器

在水銀,可以通過

  1. 解開提交它們轉換爲補丁,
  2. 打開並將
  3. 移動補丁文件之間的diff線(如果您的水銀GUI當時沒有開放)。

當GUI重新打開時,修補程序包含它們應該是什麼,可以完成並推送。

這實際上是我所瞄準的工作流程。有什麼類似的混帳?

工具我使用:TortoiseGit和GitExtensions在Win10

編輯:解決方案在回答

git checkout new_branch 
git reset -p HEAD~1 
git add -p 
... 
git commit -m "my changeset 1" 
git add 
git commit -m "my changeset 2" 
git checkout old_branch 
git reset --hard <new_branch>~1 

這給了我old_branch的變更1,並在new_branch建議變更2.

再次感謝!

回答

2

使用git add -p來選擇性地對您計劃提交的更改/區塊進行階段化。在提交第一批後,您可能會留下第二組更改,在這種情況下,您可以按正常方式添加文件並進行提交。

Git會問你想要做什麼與每個提交。鍵入'?'求助。按'y'放置大塊,'n'放棄暫存區域的塊。

如果git沒有選擇足夠好的穀粒,當它詢問你如何處理這個塊時,你可以按'e'並且你的編輯器會打開,你可以選擇哪個部分你想包括的大塊。

最近了解到這一點,它非常有用。

+0

感謝您的搶先解決方案!肯定會注意到未來。有沒有辦法從已經提交的變更集中刪除變更? – starturtle

+1

@TinyT有一個'git reset -p'可以在hunks中停留(所以它從staging/index區域中刪除東西) – jbu

+0

謝謝,它在新分支上使用'git reset -p HEAD〜1'工作(使用選項因爲我不想丟棄任何),然後以正確的順序提交更改(使用GUI提交工具殺死了git add -p設置,不幸的是,所以我不得不復制後期版本的我的混合文件,撤消變更集2,提交變更集1,覆蓋文件,並提交變更集2),然後執行硬重置我的舊分支變更集1,丟棄其他錯誤承諾(這是兩個分支)。 – starturtle

相關問題