Git プルが成功した後にビルドに失敗するアプリケーションがあるとします (たとえば、コンパイルが失敗します)。マージを「キャンセル」して前の状態に戻すにはどうすればよいですか?
3 に答える
vonbrand が指摘したように、最近の reflog エントリは次のように表示できます。
git reflog
おおよそどれくらい前のコミットかがわかったら、たとえば 10 件のコミットを行い、Steven Penny が指摘したように、インタラクティブなリベース コマンドを発行します。
git rebase -i HEAD~3
これにより、エディターが表示されます。その中で、コミットを完全に削除するか、各コミットに対して他のアクションを実行するかを選択できます。エディターで削除するすべての行は、コミットが削除されます。インラインの Git コメントは非常に役立ちますが、これはここで言及したことを覚えておくのに十分重要です。おそらく、良いコミットと悪いコミットが混在しているため、次のようになります。
pick 8042b55 Added important file
pick 3459cce Add junk files
pick cb2e26d Adding another change I want to keep
pick b00221f Add stuff I won't want to keep in the file.
# Rebase b0fd283..b00221f onto b0fd283
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
変更をサーバーにプッシュすることを忘れないでください。そうするまで、「git pull」は失敗します。
以下は、リベースが成功して変更をオリジンに強制的にプッシュした後に使用できる、やや危険なコマンドです。
git push -f
git rebase
削除するコミットを選択できる素敵なリストがポップアップするので、私はこのジョブに使用することを好みます。リストするコミットの数を選択してから、このように呼び出します
git rebase -i HEAD~3
サンプルリスト
pick aa28ba7 Sanity check for RtmpSrv port
pick c26c541 RtmpSrv version option
pick 58d6909 Better URL decoding support
次に、git は、削除した行のコミットを削除します。
を見てくださいgit reflog
。リポジトリに加えられた変更が記録されています。最後にめちゃくちゃになったものを引っ張った場合は、 に戻りたいと思うでしょうHEAD@{1}
。
なぜそれがもうビルドされないのかを調べたほうがよいでしょう。アップストリームが Makefile の依存関係に注意を払っておらず、古いオブジェクトと新しくコンパイルされたオブジェクトを結合しようとしている可能性があります。完全なクリーンアップを行います。通常make clobber
、またはmake distclean
そのようなもの、またはヘビーハンドのgit clean
.
いずれにせよ、たとえ詳細なバグ レポートであっても、無料で入手できるコードに対して何かお返しをしようと思います。