web-dev-qa-db-ja.com

ソースツリーを使用してプッシュをリモートに戻す

機能ブランチを誤ってリモートマスターにプッシュしました。マスターを以前のコミットに戻したいのですが。 「現在のブランチをこのコミットに戻す」を選択すると、ローカルブランチのみが戻されます。リモートマスターが55先にあるため(偶発的なプッシュ)、戻したばかりのローカルマスターをリモートにプッシュできません。

SOおよびGoogleでこの問題を調べたところ、多くの人がコマンドラインを使用して強制プッシュを使用しています。しかし、ソースツリーを使用しているので、方法を考えたいと思います実際にはソースツリーを使用しています。

リベースオプションも見つけましたが、段階的なチュートリアルが見つからないようです。

何か案は?

22
Michael Kloet

コミットをプッシュするとき、(-fでプッシュを強制するのではなく)コミットを元に戻す最も安全な方法は、revert関数を使用することです。そのため、以前のコミットの上に新しいコミットが作成されます。

これは、Sourcetreeを使用して、元に戻すコミットを右クリックし、[Reverse commit ...]を選択して実行できます。

enter image description here

元に戻すコミットごとに、逆の順序でこれを行う必要があります。

21
Jesús Carrera

これを行う最良の方法は、Reset <branch> to this commitオプションを下の画像に示します。

Reset to previous commit

ポップアップが表示され、選択するコードリセットのモードを選択できます。 [下記参照] Choose the mode of reset

注:これは正確にコードを逆にするものではありませんが、コミットを完全に削除しますローカルで、見た目をきれいにします。

2

Sourcetreeは-fフラグを公開していません: https://answers.atlassian.com/questions/54469/how-do-i-perform-a-forced-Push-push-f -from-sourcetree

したがって、リモートを元の状態に戻す唯一の方法は、逆の順序で導入した各コミットを git revert することです。

リモートがコミットAにあり、コミットBCおよびDを保持している機能ブランチをプッシュしたと仮定すると、

git revert D
git revert C
git revert B
git Push

プッシュされた履歴を変更するのではなく、新しい一連の変更をプッシュするため、プッシュは正常に機能します。

一連の復帰を1つのコミットに短縮したい場合は、

git rebase -i Origin/master

revertコミットのそれぞれを選択してsquashedにします。そうすると、Pushには、DCBを一度に戻すコミットが1つだけ含まれます。

1
eckes