1. ホーム
  2. git

[解決済み] masterブランチの「途中」コミットをポップアップしてゴミ箱に捨てたいのですが、どうすればいいですか?どうすればいいですか?

2023-01-09 09:43:55

質問

例えば、以下のmasterブランチにおいて、前回のリベースにより2回目となったコミット af5c7bf16e6f04321f966b4231371b21475bc4da のみをトラッシュする必要があります。

commit 60b413512e616997c8b929012cf9ca56bf5c9113
Author: Luca G. Soave <[email protected]>
Date:   Tue Apr 12 23:50:15 2011 +0200

    add generic config/initializers/omniauth.example.rb

commit af5c7bf16e6f04321f966b4231371b21475bc4da
Author: Luca G. Soave <[email protected]>
Date:   Fri Apr 22 00:15:50 2011 +0200

    show github user info if logged

commit e6523efada4d75084e81971c4dc2aec621d45530
Author: Luca G. Soave <[email protected]>
Date:   Fri Apr 22 17:20:48 2011 +0200

    add multiple .container at blueprint layout

commit 414ceffc40ea4ac36ca68e6dd0a9ee97e73dee22
Author: Luca G. Soave <[email protected]>
Date:   Thu Apr 21 19:55:57 2011 +0200

    add %h1 Fantastic Logo + .right for 'Sign in with Github'

維持する必要がある

  • 最初のコミット 60b413512e616997c8b929012cf9ca56bf5c9113 です。
  • 3 番目のコミット e6523efada4d75084e81971c4dc2aec621d45530 および
  • 最後のコミット 414ceffc40ea4ac36ca68e6dd0a9ee97e73dee22

2 番目のコミットだけを捨てる af5c7bf16e6f04321f966b4231371b21475bc4da

どうすればいいのでしょうか? ありがとうございます。 ルカ

どのように解決するのですか?

リベース または 元に戻す がオプションです。リベースは実際にそのコミットを履歴から削除するので、2 番目のコミットが存在しなかったかのように見えます。これは、master ブランチを他のリポジトリにプッシュしている場合に問題となります。この場合、リベースの後にプッシュしようとすると git は fast-forward でないマージを拒否する というエラーが発生します。

ブランチが他のレポと共有されている場合、リバートするのが正しい解決方法です。 git revert af5c7bf16 は af5c7bf16 が行った変更を単純に取り消す新しいコミットを作成します。この方法では、履歴は書き換えられず、ミスの明確な記録を維持し、他のレポはそのプッシュを受け入れます。

ここで、消去するための良い方法を紹介します。 git rebase -i <commit>^ これで、削除したいコミットの直前のコミットに移動します。対話型エディタには、その時点までのすべてのコミットのリストが表示されます。選んだりつぶしたりすることができます。この例では を削除します。 のように、消したいコミットの行を削除し、ファイルを保存してください。Rebaseはその作業を終了します。