git revert
を理解しようとすると、A、B、C、Dの4つの単純なコミットがテキストファイルfoo.txt
取り消しの意図はBを後でコミットし、コミットA、C、Dはそのままにします。git revert:単純なケースでも個々のコミットを元に戻すことができない
したがって、コミットごとに、フィーチャーが追加されたか、導入されたバグをエミュレートする新しい行がファイルに追加されました。 foo.txt
のAをコミットした後
、内容:
Feature A
は後にBをコミット、foo.txt
の内容:は(ここで、私は私が後で戻す/やり直してみようバグを紹介します。コミットC後)
Feature A
Bug
、foo.txt
の内容:
Feature A
Bug
Feature C
が後foo.txt
の内容、Dをコミット:
Feature A
Bug
Feature C
Feature D
を今、(バグを導入しました)Bのコミットの効果を元に戻すために、私がやった:
git revert master^^
私が期待していたのは、ファイルからBug
行を削除した新しいコミットEでした。失敗したgit revert
ビーイング次のファイルの内容で
error: could not revert bb58ed3... Bug introduced
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
:
Feature A
Feature C
Feature D
しかし、私はエラーを得た:エントとして
Feature A
<<<<<<< HEAD
Bug
Feature C
Feature D
=======
>>>>>>> parent of bb58ed3... Bug introduced
は(bb58ed3は、ハッシュですコミットB、'Bug introduction'このコミットのコメント。)
質問:
ここで何が起こっていますか?
単純な1行コミットであっても自動的に元に戻す/元に戻すことができず、私の手作業による解決が必要な場合は、元の開発者が他の誰かになる可能性があるもっと複雑なコミットを取り戻すことができます。
git revert
のほうが適切な場合がありますか?
私は、文脈のことは助けている以上のことを傷つけていると思います。 'git'は、' git revert'オプションを使ってコンテキストの使用を無効にすることができます。コンテキストが適切なターゲットとそのバージョンに適用されている場合は、パッチを送信して盲目的に適用したり、完全に認識していない場合に役立ちます。しかし、私のような場合は、 'git'自体が正確なソースとターゲットを正確に知っているので、どうしてコンテキストを利用するのでしょうか?あなたの説明を気に入ってください、btw。私はそれを最終にする前にもう少し待つでしょう。 – Harry
@ハリー私はいくつかの説明を追加しました。変数の名前の変更、メソッドの名前の変更など、より複雑な状況が存在することがあります。その中には、結果のコードがコンパイルされるものもあります。したがって、コンテキストを無視するかどうかを自動的にチェックすることは不可能であり、 'git'は安全です。 – yeputons
あなたの例は間違いなく理にかなっています。しかし、その後、名前の変更が文脈の外でも起こることがあるので、 'git'はどのように(限られた)文脈に依存することができましたか? – Harry