web-dev-qa-db-ja.com

git revert <hash>はマージのため許可されていませんが、-mオプションが指定されていません

「revert」コマンドを使用して、gitで特定の「ハッシュ」番号に戻そうとしています。

次のコマンドを使用しています。

git revert c14609d74eec3ccebafc73fa875ec58445471765

しかし、次のものが返されます。

エラー:コミットc14609d74eec3ccebafc73fa875ec58445471765はマージですが、-mオプションが指定されていません。
致命的:元に戻すことができませんでした

新しいgitユーザーとして、何が起こっているのか、これを解決するために私が何をしなければならないのか説明してください。

この特定のコミットに戻したい(c14609d74eec3ccebafc73fa875ec58445471765)実行中に表示されるgit log

24
user3544484

マージコミットを元に戻そうとしていますが、gitはどの親に戻すかわかりません。 -mでは、選択する親を選択できます。マージコミットを確認し、移動先の親を書き留めます。親情報はgit logで確認できます。次に例を示します。

コミットd02ee0f2179def10277f30c71c5d6f59ded3c595

マージ:dd3a24c 2462a52

そして実行:

git revert <hash> -m 1

ここで、1は親番号1を示します。

toのコミットを元に戻す場合は、次のようにします。

git reset --hard <hash>

ドキュメントのgit revertgit resetの違いを理解し、どちらを使用するかを決定します。 git revertはより安全なオプションですが、実際には希望どおりの動作をしません。コミット(のセット)の変更を元に戻すだけです。 git resetは、履歴内の特定のコミットに移動し、履歴を書き換えます。

34
manojlds

に戻したい...

その後、あなたはしたくないgit revert、少なくともこれは好きではありません。 git revertは、そのコミットで行われた特定の変更を元に戻すためのものです。あなたが探しているのは、行われたすべての変更を元に戻すか元に戻すことですafterそのコミット。

git resetは、ここで使用するコマンドです。

git reset --hard c14609d74eec3ccebafc73fa875ec58445471765ブランチ、インデックス、ワークツリーを完全にその特定のコミットにリセットします。

通常の予防策が適用されることに注意してください。他の誰かがすでに後でコミットをフェッチしている場合、これを履歴から削除すると、問題が複雑になります。代わりに、新しいコミットを作成する場合は、単に状態をコミットc14609d74eec3ccebafc73fa875ec58445471765の状態に復元するだけで、git rmおよびgit checkout

git rm -r .
git checkout c14609d74eec3ccebafc73fa875ec58445471765 .

rmは、新しく追加されたファイルも確実に削除するために必要です。)これにより、ローカル履歴に加えて新しいコミットを作成できます。これにより、c14609d74eec3ccebafc73fa875ec58445471765以降のすべての変更が取り消されます。

2
user743382