web-dev-qa-db-ja.com

プッシュ後にマージを元に戻す

実行した手順:

2つのブランチbranch1とbranch2があります

$git branch --Initial state
$branch1

$git checkout branch2
$git pull Origin branch1 --Step1

競合を解決し、

$git commit -m "Merge resolved"

それから

$git checkout branch1
$git merge branch2
$git Push Origin branch1

今、私はステップ1にいる間に自動マージがいくつかのコードを削除し、変更コードがプッシュされたことに気付きました。今、変更を元に戻すために初期状態に戻りたいと思います。

55
Bijendra

公式ガイド に従ってマージを元に戻すことができますが、Gitはマージされたコミットがまだターゲットブランチ上にあるという誤った信念を残します。

基本的にあなたがする必要があります:

git revert -m 1 (Commit id of the merge commit)
69
aleroot

git reflog <branch>を使用して、ブランチのマージ前の場所を見つけ、git reset --hard <commit number>を使用して古いリビジョンを復元してみてください。

Reflogはブランチの古い状態を表示するので、好きな変更セットに戻すことができます。

git resetを使用するときに正しいブランチにいることを確認してください

リモートリポジトリの履歴を変更するには、git Push -fを実行できますが、誰かがあなたがプッシュした変更を既にダウンロードしている可能性があるため、これはお勧めできません。

20
Ilya Ivanov

最初のオプションは、git revertの使用です。

git revert -m 1 [sha-commit-before-merge]

git revertは変更を元に戻しますが、履歴は保持します。したがって、マージされたブランチと機能ブランチの実際の違いを確認することはできないため、同じブランチで作業を続けることはできません。履歴も削除するには、次の方法を使用します。現時点でブランチに変更をプッシュしているのが自分だけである場合にのみ、これを非常に慎重に行ってください。

git reset --hard [sha-commit-before-merge]
git Push [Origin] [branch] --force
3
Asanka sanjaya