2012-07-18 81 views
3

我有一個存儲庫,其中包含各種提交,我想要將它們合併到兩個補丁中。 介紹該功能的另一個修補程序,以及更改現有代碼以使用它的一個修補程序。 問題是,當我編寫代碼並提交時,我沒有記住這一點,所以有提交這兩個都做。我如何拆分這些提交?使用git rebase更改之前提交的代碼-i

我知道,不知怎的,我可以做的Git重訂,它-i和採摘編輯每個提交我想改變,但

回答

2

的Git rebase讓你split commits

在交互模式下,你可以標記與行動 「編輯」 提交。但是,這並不一定意味着git rebase期望這個編輯的結果只是一個提交。事實上,您可以撤銷提交,也可以添加其他提交。這可以用於將提交分爲兩部分:

  • 使用git rebase -i ^開始交互式轉化,其中是您要分割的提交。實際上,只要包含該提交,任何提交範圍都會執行。

  • 用動作「編輯」標記要分割的提交。

  • 當談到編輯提交時,執行git reset HEAD ^。其效果是HEAD被倒回一個,並且索引跟隨。但是,工作樹保持不變。

  • 現在將更改添加到您希望在第一次提交中使用的索引中。你可以使用git add(可能交互式地)或者git gui(或者兩者)來做到這一點。

  • 現在提交當前的索引和任何提交消息是合適的。

  • 重複最後兩個步驟,直到你的工作樹幹淨。

  • 用git rebase繼續rebase - continueue。

如果你不能絕對確保中間版本是一致的(它們編譯,經過測試套件等),你應該使用git藏匿藏匿遠還未提交的修改每次提交後,測試如果需要修復,修改提交。

1

這裏這樣,我只能改變提交信息,而不是代碼我會做什麼:

git reset COMMIT_BEFORE_CHANGES --soft 

並在適當的提交中重新提交所有內容。 --soft將使您的工作樹和索引處於重置前的狀態。

不用說,在別人從你身上拉下來後,你不應該這樣做。

+0

看起來像git文檔不同=)。 – R0MANARMY 2012-07-18 15:45:27

+0

@ R0MANARMY文檔提出了一些與我在這裏所做的相似的事情,但是使用rebase更加通用。當您要分割的提交與其他提交交錯時,我的解決方案不起作用。 – pmr 2012-07-18 15:49:00

+0

我只是想說這個部分*拆分多個單獨提交是AFAIK **不可能***。 – R0MANARMY 2012-07-18 15:51:22

相關問題