Bagaimana cara mengembalikan cabang master ke tag di git?

92

Kami memiliki cabang asal dan berkembang. Status awal master diberi tag pada tag_ABC.

Kami memiliki sedikit perubahan yang dilakukan pada cabang pengembangan dan didorong ke asal. Kemudian kami secara tidak sengaja menggabungkan develop menjadi master dan didorong ke asal.

Sekarang kami ingin mengembalikan master ke pos pemeriksaan tag_ABC. Bagaimana kita bisa melakukannya?

Manjunath Manoharan
sumber

Jawaban:

164

Anda dapat melakukan

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

Harap dicatat bahwa ini akan menimpa riwayat yang ada di repo upstream dan dapat menyebabkan masalah bagi pengembang lain yang telah memeriksa repo ini.

Paweł Obrok
sumber
5
Dengan cara ini semua cabang akan didorong dengan kuat. Anda mungkin ingin mencobagit push --force origin master
danza
1
Sebagai referensi, untuk kembali ke komit sebelumnya, Anda dapat melakukangit reset --hard HEAD^
Geoff
1
BTW git reset --hard HEAD^dapat digunakan beberapa kali untuk mundur satu komit pada satu waktu kemudian jika di remote, git push --force origin masterdapat digunakan.
Luke Wenke
Juga untuk mengatur ulang cabang master salinan lokal orang lain ke penggunaan versi sebelumnya git pulldangit reset --hard origin/master
Luke Wenke
Sedikit saran setelah pengembalian ini, dapat diberitahukan kepada tim: tarik dari cabang utama !! Terima kasih!!
JRichardsz
95

Ini bukan jawaban langsung untuk pertanyaan tetapi halaman ini muncul kembali saat mencari cara untuk mengembalikan kode cabang ke pelepasan tag.

Cara lain adalah membuat perbedaan antara status cabang saat ini dan tag yang ingin Anda kembalikan, lalu menerapkannya ke cabang. Ini membuat riwayat versi benar dan menunjukkan perubahan yang terjadi kemudian keluar lagi.

Dengan asumsi cabang Anda disebut master dan tag yang ingin Anda kembalikan disebut 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
John
sumber
21
Ini harus menjadi jawaban yang diterima karena ini membuat sejarah tetap utuh dan tidak menimbulkan masalah bagi orang lain yang telah memeriksa repo.
OpenUserX03
1
Ini terlihat elegan. Tapi saya mencoba mengembalikan cabang qa ke tag sebelumnya dan baru saja mendapat pesan patch gagal. $ cat ../diff_qa.patch | git apply <stdin>: 55: spasi kosong di belakang. <stdin>: 336: spasi kosong di belakang. <stdin>: 12692: spasi kosong di belakang. <stdin>: 12695: spasi kosong di belakang. <li> {{$ tag ['rank'] + 1}}: <stdin>: 12706: spasi kosong di belakang. kesalahan: tambalan gagal: .env.wholo: 1
rickatech
Saya sudah mencoba beberapa solusi, tetapi tidak ada yang berhasil. Yang ini bekerja dengan sangat baik. Terima kasih banyak
@John
Ini adalah cara yang benar untuk dilakukan. Ini tidak merusak dan mempertahankan sejarah penuh
Nitin Bansal
Ini tidak berhasil untuk saya. Saya dapat menjalankan 3 perintah pertama tanpa masalah apa pun, tetapi ketika saya melakukannya cat ~/diff.patch | git apply, itu memberi tahu saya error: unrecognized input. Ada ide? @NitinBansal mungkin karena Anda berkomentar baru-baru ini?
Pengalaman111