2013-03-05 10 views
6

私は同じブランチ上に2つのコミットを持っています。最初のコミットにファイルAの変更を追加してから、他のファイルにいくつか変更を加えた後、別のコミットを行いました。今度は、ファイルAへの変更を最初のコミットではなく2番目のコミットにしたいと思います。最もエレガントな方法は何ですか?変更をあるコミットから別のコミットにどのように移すべきですか?

+1

を行うレンスddp保存

  • )下に移動しなければならないラインの中、終了し、Gitのリベースを聞かせ[ここ](https://git-scm.com/docs/git-rebase#_splitting_commits) – rumman0786

    +0

    この質問は「Gitを使って私の最後のXコミットを一緒にコミットする」という特別なケースです。https://stackoverflow.com/questions/5189560/squash-my-last-x-commits-together-using -git –

    答えて

    6

    、といつものgitに小さくあるべきで、最も簡単な方法はgit reset HEAD^^にあり、その後、もう一度それらを行うコミット:

    はこちらを参照してください。これに対する解決策には、履歴の書き換えが含まれていることに注意してください。これらのコミットを既にどこかにプッシュしている場合は、実行していることがわからない限り、実行しないでください。

    +2

    "とコミットは常に小さくなければなりません" 確か... – Betamos

    0

    これらのコミットを作成したばかりのイベントでは、git reset HEAD^で2番目のコミットを取り消してから、最初のコミットに変更を追加してgit commit --amendとします。

    移動した可能性が高く、コミットが過去のある時点であった場合、リベースが最適なオプションです。あなたの正確な状況を知らずに、それをうまく説明している参考文献を引用するのがおそらく最も良いでしょう。

    第1回目と2回目のイベントの両方で、Pro Gitの本の履歴書き直しセクションでは、オプションをいつ使うべきか注意を使うべきかをよく説明しています。

    6.4 Git Tools - Rewriting History

    3

    私は、この目的を満たすために、スクリプトを書きました。あなたはそれをチェックアウトすることができますhere。この問題への

    mv-changes HEAD~ HEAD fileA 
    
    0

    別の解決策を

    • 2つのコミット直前にコミット検索を(おそらくこれは、masterブランチである)
    • :それはのように単純になり、スクリプトを使用して

    • 実行git rebase -i <commit before commits to be reordered>(ほとんどの場合、git rebase -i master
    • テキストエディタで、コミットの順番を入れ替えます(vimの場合は、あなたはGitがリベース確認することができ、残り
    関連する問題