Gitで変更されたファイルを古い(最後のではない)コミットに追加する方法 質問する

Gitで変更されたファイルを古い(最後のではない)コミットに追加する方法 質問する

過去 1 時間でいくつかの変更を行い、段階的にコミットしましたが、いくつかのコミット前に変更したファイルを追加するのを忘れていたことに気付きました (たとえば、a0865...以下のようにマークされたコミット)。

ログは次のようになります。

GIT TidyUpRequests u:1 d:0> git log 
commit fc6734b6351f6c36a587dba6dbd9d5efa30c09ce 
Author: David Klein <> 
Date:   Tue Apr 27 09:43:55 2010 +0200

    The Main program now tests both Webservices at once

commit 8a2c6014c2b035e37aebd310a6393a1ecb39f463 
Author: David Klein <>
Date:   Tue Apr 27 09:43:27 2010 +0200

    ISBNDBQueryHandler now uses the XPath functions from XPath.fs too

commit 06a504e277fd98d97eed4dad22dfa5933d81451f 
Author: David Klein <> 
Date:   Tue Apr 27 09:30:34 2010 +0200

    AmazonQueryHandler now uses the XPath Helper functions defined in XPath.fs

commit a0865e28be35a3011d0b6091819ec32922dd2dd8 <--- changed file should go here
Author: David Klein <> 
Date:   Tue Apr 27 09:29:53 2010 +0200

    Factored out some common XPath Operations

何か案は?

ベストアンサー1

使用git rebase。 具体的には:

  1. git stash追加したい変更を保存するために使用します。
  2. git rebase -i HEAD~10(または、確認したいコミットの数だけ)を使用します。
  3. 問題のコミット ( ) を編集対象としてマークするには、行の先頭のa0865...単語を に変更します。コミットが削除されてしまうので、他の行は削除しないでください。[^vimnote]pickedit
  4. リベース ファイルを保存すると、git はシェルに戻り、そのコミットが修正されるまで待機します。
  5. を使用してスタッシュをポップしますgit stash pop
  6. でファイルを追加しますgit add <file>
  7. コミットを で修正しますgit commit --amend --no-edit
  8. git rebase --continue残りのコミットを新しいコミットに書き換える を実行します。
  9. 複数のコミットを編集対象としてマークした場合は、手順 2 以降を繰り返します。
  10. --force以前に変更されたコミットを他の場所にプッシュしている場合は、リモートで更新するために再度プッシュする必要があります。ただし、 の使用に関する通常の警告が--force適用され、注意して事前に調整しないと、他の人の作業を簡単に失う可能性があります。

[^vimnote]: を使用している場合は、編集するためにキーvimを押してInsertから、ファイルを保存するためにEsc入力し:wq、エディタを終了して変更を適用する必要があります。または、ユーザーフレンドリーなgitコミットエディタを設定するgit config --global core.editor "nano"

おすすめ記事