4

私は一連のコミットを行ってきましたが、2 つのコミットをマージしたいと思っていることがわかりました。最後の2つではありませんが、少し離れています

私のログ:

commit 326f35d83963660893d065e480f231b76f052dd2
Author: Peter Smit <peter@something.eu>
Date:   Thu Dec 16 11:13:47 2010 +0200

    Small editing in ASR chapter

commit 652b4c27a5fcb2125ed82aea31421fca4e8eee47
Author: Peter Smit <peter@something.eu>
Date:   Thu Dec 16 11:12:55 2010 +0200

    Added longtable package for abbreviations

commit 74069a151cce9c47484403c1db76e68e1360d8ee
Author: Peter Smit <peter@something.eu>
Date:   Thu Dec 16 11:12:23 2010 +0200

    Changed some headings in the introduction

commit 94126f79fdc6f4927a3f270c152393377e9ef5a5
Author: Peter Smit <peter@something.eu>
Date:   Thu Dec 16 11:11:57 2010 +0200

    Added abbreviations chapter

4 つのコミットはすべて個別のファイルを変更しているため、マージの競合は発生しません。

652b4 (追加された longtable) を 94126 (追加された略語) コミットに追加したいと思います。これどうやってするの?

4

2 に答える 2

10

この状況は、インタラクティブなリベースによって処理されます。プッシュされた履歴を書き換えないという標準の警告が適用されます。Git Book にはまともな説明がありますが、個人的には のインターフェイスrebase -iがまったく逆になっていることがわかります。

変更する必要がある最も古いコミットのに名前を付けて、リベースを開始します。

$ git rebase -i 94126f7^

エディターがポップアップして、コミットを時系列順で一覧表示します(そのため、頭をひっくり返す必要があります)。指定されたコミットのHEADから子までのすべてのコミットがリストされます。これが、親に名前を付けた理由です。

pick 94126f7 Added abbreviations chapter
pick 74069a1 Changed some headings in the introduction
pick 652b4c2 Added longtable package for abbreviations
pick 326f35d Small editing in ASR chapter

やりたいことは、コミット 652b4c2 を 94126f7 にsquashすることです。そのため、そのコマンドを「squash」に変更し、後者の直後に移動します。

pick 94126f7 Added abbreviations chapter
squash 652b4c2 Added longtable package for abbreviations
pick 74069a1 Changed some headings in the introduction
pick 326f35d Small editing in ASR chapter

保存して終了; ポップアップする次のエディターは、結合されたコミット メッセージ用です。これは必要に応じて変更できます。終了すると、リベースが終了します。

リベース中の競合は厄介な場合があり (一部のパッチは単純に移動しません)、マージは特に醜い場合がありますが、ファイルの追加の並べ替えには問題はありません。

于 2010-12-16T09:40:50.427 に答える
3

それらのコミットをまだプッシュしていない場合は、実行してください (インタラクティブなリベースgit rebase --interactiveを参照してください)。 これらの 2 つのコミットを 1 つにすることができます。

于 2010-12-16T09:29:32.607 に答える