ฉันจะเปลี่ยนสาขาหลักกลับเป็นแท็กใน git ได้อย่างไร


92

เรามีสาขากำเนิดและพัฒนา tag_ABCสถานะเริ่มต้นของเจ้านายที่ถูกแท็ก

เรามีการเปลี่ยนแปลงเล็กน้อยในสาขาการพัฒนาและผลักดันไปสู่จุดเริ่มต้น จากนั้นเราได้รวมการพัฒนาเป็นหลักโดยบังเอิญและผลักดันไปสู่จุดเริ่มต้น

tag_ABCตอนนี้เราต้องการที่จะย้อนกลับไปยังหลักด่าน เราจะทำเช่นนั้นได้อย่างไร?

คำตอบ:


164

คุณทำได้

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

โปรดทราบว่าสิ่งนี้จะเขียนทับประวัติที่มีอยู่ใน repo ต้นน้ำและอาจทำให้เกิดปัญหากับนักพัฒนาคนอื่น ๆ ที่มีการชำระเงิน repo นี้


5
วิธีนี้กิ่งก้านทั้งหมดจะถูกผลักด้วยแรง คุณอาจต้องการลองgit push --force origin master
danza

1
สำหรับการอ้างอิงหากต้องการเปลี่ยนกลับไปใช้คอมมิตก่อนหน้านี้คุณสามารถทำได้ agit reset --hard HEAD^
Geoff

1
BTW git reset --hard HEAD^สามารถใช้หลายครั้งเพื่อย้อนกลับทีละคอมมิตจากนั้นหากอยู่ในระยะไกลgit push --force origin masterสามารถใช้ได้
Luke Wenke

นอกจากนี้เพื่อรีเซ็ตสาขาหลักของสำเนาท้องถิ่นของคนอื่นเป็นการใช้เวอร์ชันก่อนหน้านี้git pullและgit reset --hard origin/master
Luke Wenke

คำแนะนำเล็ก ๆ น้อย ๆ หลังจากการเปลี่ยนกลับครั้งนี้สามารถบอกกับทีมงานได้: ดึงจากสาขาหลัก !! ขอบคุณ !!
JRichardsz

95

นี่ไม่ใช่คำตอบโดยตรงสำหรับคำถาม แต่หน้านี้จะกลับมาเมื่อค้นหาวิธีเปลี่ยนรหัสสาขากลับเป็นการเปิดตัวแท็ก

อีกวิธีหนึ่งคือการสร้างความแตกต่างระหว่างสถานะปัจจุบันของสาขาและแท็กที่คุณต้องการเปลี่ยนกลับจากนั้นนำไปใช้กับสาขา ซึ่งจะช่วยให้ประวัติเวอร์ชันถูกต้องและแสดงการเปลี่ยนแปลงที่เกิดขึ้นจากนั้นจะกลับมาอีกครั้ง

สมมติว่าสาขาของคุณเรียกว่า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

21
นี่ควรเป็นคำตอบที่ได้รับการยอมรับเนื่องจากช่วยให้ประวัติยังคงอยู่และไม่ก่อให้เกิดปัญหากับผู้อื่นที่มีการชำระเงิน repo
OpenUserX03

1
ดูเหมือนสง่างาม แต่ฉันพยายามเปลี่ยนสาขา qa กลับเป็นแท็กก่อนหน้าและเพิ่งได้รับข้อความ patch fail $ cat ../diff_qa.patch | git ใช้ <stdin>: 55: ช่องว่างต่อท้าย <stdin>: 336: ช่องว่างต่อท้าย <stdin>: 12692: ช่องว่างต่อท้าย <stdin>: 12695: ช่องว่างต่อท้าย <li> {{$ tag ['rank'] + 1}}: <stdin>: 12706: trailing whitespace ข้อผิดพลาด: patch ล้มเหลว: .env.wholo: 1
rickatech

ฉันได้ลองวิธีแก้ปัญหาหลายวิธีแล้ว แต่ไม่มีวิธีใดได้ผล อันนี้ใช้งานได้เหมือนมีเสน่ห์ ขอบคุณมาก
@John

นี่คือวิธีทำที่ถูกต้อง ไม่ทำลายและรักษาประวัติศาสตร์เต็มรูปแบบ
Nitin Bansal

สิ่งนี้ไม่ได้ผลสำหรับฉัน ฉันสามารถเรียกใช้คำสั่ง 3 ครั้งแรกโดยไม่มีปัญหาใด ๆ แต่เมื่อฉันทำก็บอกฉันcat ~/diff.patch | git apply error: unrecognized inputความคิดใด ๆ ? @NitinBansal อาจเป็นเพราะคุณแสดงความคิดเห็นเมื่อเร็ว ๆ นี้?
ประสบการณ์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.