マスターブランチをgitのタグに戻すにはどうすればよいですか?


87

私たちは枝を起源とし、発展しています。マスターの初期状態はでタグ付けされましたtag_ABC

開発ブランチに加えられた変更はほとんどなく、元に戻されました。その後、誤って開発をマスターにマージし、元に戻しました。

ここで、マスターをチェックポイントに戻しtag_ABCます。どうすればそれができますか?

回答:


159

できるよ

git checkout master
git reset --hard tag_ABC
git push --force origin master

これにより、アップストリームリポジトリの既存の履歴が上書きされ、このリポジトリをチェックアウトしている他の開発者に問題が発生する可能性があることに注意してください。


5
このようにして、すべての枝が力で押されます。あなたは試してみたいかもしれませんgit push --force origin master
ダンザ2013

1
参考までに、前のコミットに戻すには、次のようにしますgit reset --hard HEAD^
Geoff

1
ところでgit reset --hard HEAD^、一度に1つのコミットをステップバックするために複数回使用でき、リモートにある場合はgit push --force origin master使用できます。
ルークウェンケ2015

また、以前のバージョンの使用に他の人のローカルコピーのmasterブランチをリセットするgit pullgit reset --hard origin/master
ルークWenke

この復帰後のちょっとしたアドバイスは、チームに伝えることができます:マスターブランチからプルしてください!! ありがとう!
JRichardsz 2016

89

これは質問に対する直接の答えではありませんが、ブランチのコードをタグリリースに戻す方法を検索すると、このページに戻ります。

もう1つの方法は、ブランチの現在の状態と元に戻したいタグの間に差分を作成し、それをブランチに適用することです。これにより、バージョン履歴が正しく維持され、変更が行われた後、再び返されることが示されます。

ブランチがmasterと呼ばれ、戻りたいタグが1.1.1と呼ばれると仮定します。

git checkout 1.1.1
git diff master > ~/diff.patch
git checkout master
cat ~/diff.patch | git apply
git commit -am 'Rolled back to version 1.1.1'
git push origin master

19
これは、履歴をそのまま保持し、レポをチェックアウトしている他の人に問題を引き起こさないため、受け入れられた答えであるはずです。
openUserX03 2016年

1
これはエレガントなようです。しかし、qaブランチを前のタグに戻そうとすると、パッチ失敗メッセージが表示されました。$ cat ../diff_qa.patch | git apply <stdin>:55:末尾の空白。<stdin>:336:末尾の空白。<stdin>:12692:末尾の空白。<stdin>:12695:末尾の空白。<li> {{$ tag ['rank'] + 1}}:<stdin>:12706:末尾の空白。エラー:パッチが失敗しました:.env.wholo:1
rickatech 2016

私はいくつかの解決策を試しましたが、どれもうまくいきませんでした。これは魅力のように機能しました。どうもありがとう@ John
Strabek18年

これが正しい方法です。それは非破壊的であり、完全な歴史を保存します
Nitin Bansal

これは私にはうまくいきません。最初の3つのコマンドは問題なく実行できますが、実行すると、が表示されcat ~/diff.patch | git applyますerror: unrecognized input。何か案が?@NitinBansalおそらく最近コメントしたので?
Experience111
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.