98

たとえば、次のマスター ブランチでは、コミット af5c7bf16e6f04321f966b4231371b21475bc4da だけを破棄する必要があります。これは、以前のリベースによる 2 番目のコミットです。

commit 60b413512e616997c8b929012cf9ca56bf5c9113
Author: Luca G. Soave <luca.soave@gmail.com>
Date:   Tue Apr 12 23:50:15 2011 +0200

    add generic config/initializers/omniauth.example.rb

commit af5c7bf16e6f04321f966b4231371b21475bc4da
Author: Luca G. Soave <luca.soave@gmail.com>
Date:   Fri Apr 22 00:15:50 2011 +0200

    show github user info if logged

commit e6523efada4d75084e81971c4dc2aec621d45530
Author: Luca G. Soave <luca.soave@gmail.com>
Date:   Fri Apr 22 17:20:48 2011 +0200

    add multiple .container at blueprint layout

commit 414ceffc40ea4ac36ca68e6dd0a9ee97e73dee22
Author: Luca G. Soave <luca.soave@gmail.com>
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

どうやってやるの?前もってありがとうルカ

4

3 に答える 3

105

リベースまたはリバートはオプションです。Rebaseは実際に履歴からコミットを削除するため、2番目のコミットは存在しなかったように見えます。これは、マスターブランチを他のリポジトリにプッシュした場合に問題になります。この場合、リベース後にプッシュしようとすると、gitは非早送りマージの拒否エラーを表示します。

ブランチが他のリポジトリと共有されている場合、復帰は正しい解決策です。git revert af5c7bf16af5c7bf16が導入した変更を単純に元に戻す新しいコミットを行います。このように、履歴は書き換えられず、間違いの明確な記録を維持し、他のリポジトリはプッシュを受け入れます。

消去する良い方法は次のとおりです。git rebase -i <commit>^ これにより、削除するコミットの直前のコミットに移動します。インタラクティブエディタには、その時点までのすべてのコミットのリストが表示されます。ピック、スカッシュなどが可能です。この場合、消去するコミットの行を削除して、ファイルを保存します。Rebaseはその作業を終了します。

于 2011-04-22T16:23:02.017 に答える
37

リベースがオプションの場合は、リベースしてドロップするだけです。

$ git rebase -i 414ceffc^

リベースがオプションでない場合は、元に戻すことができます。

$ git revert af5c7bf16
于 2011-04-22T16:11:22.563 に答える