たとえば、次のマスターブランチでは、コミットaf5c7bf16e6f04321f966b4231371b21475bc4daのみをトラッシュする必要があります。これは、以前のリベースによる2番目です。
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'
私は維持する必要があります
2番目のコミットだけを「破棄」af5c7bf16e6f04321f966b4231371b21475bc4da
どうやってやるの?事前に感謝ルカ
Rebaseまたはrevertはオプションです。 Rebaseは実際に履歴からコミットを削除するため、2番目のコミットは存在しなかったように見えます。マスターブランチを他のリポジトリにプッシュした場合、これは問題になります。この場合、リベース後にプッシュしようとすると、gitは拒否の非早送りマージエラーを返します。
ブランチが他のリポジトリと共有されている場合、Revertは正しいソリューションです。 git revert af5c7bf16
は、af5c7bf16が導入した変更を単に元に戻す新しいコミットを行います。このように、履歴は書き換えられず、間違いの明確な記録を維持し、他のリポジトリはプッシュを受け入れます。
消去する良い方法は次のとおりです:git rebase -i <commit>^
削除したい直前のコミットに移動します。インタラクティブエディターには、その時点までのすべてのコミットのリストが表示されます。ピック、スカッシュなどが可能です。この場合、removeファイルを消去して保存するコミットの行を削除します。 Rebaseは作業を終了します。
リベースがオプションの場合、リベースしてドロップすることができます:
$ git rebase -i 414ceffc^
Rebaseがオプションでない場合は、単に元に戻すことができます。
$ git revert af5c7bf16
ここで元々の回答が受け取ったすべての功績にも関わらず、私は彼らが質問に満足に答えることを見つけることができませんでした。コミットまたはコミットのコレクションを履歴の途中から削除する必要がある状況にいる場合は、次のことをお勧めします。
チェリーピッキングに関する情報は次のとおりです。 gitでコミットをチェリーピッキングするとはどういう意味ですか?
Tortoise Gitを使ってそれを実行する方法をいくつか紹介します(私がしたように)この種の操作にGUIユーティリティを使用するのは間違いなく簡単です! TortoiseGitを使用したチェリーピック