對不起,如果有一個重複的地方,我淹沒了一大堆技巧來改變提交消息(這並沒有幫助我),當尋找一個解決方案。在同一個文件中可以改變分裂到git中的不同提交?
我有兩套變化的應該是一個承諾每個一部分。不幸的是,我在早上開始了第二次換班,沒有注意到我忘記了在晚上之前犯下第一次換班。
在大多數情況下,它們會影響不同的文件。但是,有一個文件包含一個文件,其中包含兩個變更集的更改,如果在沒有第二個變更集的情況下進行推送,則該文件將被破壞。太糟糕了,我想在一個單獨的分支上工作,直到功能。
可悲的是,我已經承諾(未按下)第一變更和創建工作分支在它的上面時,我注意到,有包含兩個更改的文件。
有沒有辦法編輯我的提交,以便我可以提取影響變更集2的更改?在文本編輯器
在水銀,可以通過
- 解開提交它們轉換爲補丁,
- 打開並將
- 移動補丁文件之間的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.
再次感謝!
感謝您的搶先解決方案!肯定會注意到未來。有沒有辦法從已經提交的變更集中刪除變更? – starturtle
@TinyT有一個'git reset -p'可以在hunks中停留(所以它從staging/index區域中刪除東西) – jbu
謝謝,它在新分支上使用'git reset -p HEAD〜1'工作(使用選項因爲我不想丟棄任何),然後以正確的順序提交更改(使用GUI提交工具殺死了git add -p設置,不幸的是,所以我不得不復制後期版本的我的混合文件,撤消變更集2,提交變更集1,覆蓋文件,並提交變更集2),然後執行硬重置我的舊分支變更集1,丟棄其他錯誤承諾(這是兩個分支)。 – starturtle