เปลี่ยนชื่อสาขาในคอมไพล์


103

อาจมีมากกว่าหนึ่งวิธีในการถามคำถามนี้ดังนั้นนี่คือคำอธิบายของปัญหา ฉันกำลังทำงานหลักและมุ่งมั่นบางอย่างจากนั้นก็ตัดสินใจว่าฉันต้องการพักงานนั้นไว้ ฉันสำรองข้อมูลไว้สองสามข้อแล้วแยกจากก่อนที่ฉันจะเริ่มงานอึ ในทางปฏิบัติได้ผลดีตอนนี้ฉันมีสาขาอื่นเป็นสาขาการพัฒนาหลักของฉัน ฉันสงสัยว่าฉันจะเปลี่ยนแปลงสิ่งต่างๆรอบตัวได้อย่างไรดังนั้นฉันจึงทำงานกับผู้เชี่ยวชาญอีกครั้ง แต่มันไม่มีงานขยะของฉันและบอกว่างานอยู่ในสาขาอื่น

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

ขอบคุณสำหรับคำตอบ (ด่วน) ทั้งหมด! พวกเขาดีทั้งหมด

คำตอบ:


144

นอกจากความคิดเห็นอื่น ๆ แล้วคุณอาจพบว่า -m (move) เปลี่ยนเป็น git-branch เป็นประโยชน์ คุณสามารถเปลี่ยนชื่อนายเก่าของคุณเป็นอย่างอื่นจากนั้นเปลี่ยนชื่อสาขาใหม่ของคุณเป็นมาสเตอร์:

git branch -m master crap_work
git branch -m previous_master master

ขึ้นอยู่กับเวิร์กโฟลว์ของคุณคุณอาจต้องการเปลี่ยนการอ้างอิงสาขาใน. git / config ฉันเปลี่ยน[branch "crap_work"]ไปอ่าน[branch "master"]เพื่อให้ต้นแบบนั้นยังคงซิงค์กับorigin/master. แน่นอนว่าสถานะของทั้งสอง repos นั้นยังคงสมเหตุสมผล
Eponymous

3
สิ่งนี้ไม่ได้เปลี่ยนชื่อสาขาบน repo ระยะไกลเฉพาะใน repo ในเครื่อง
smohadjer

1
@smohadjer ในการเปลี่ยนชื่อรีโมทคุณต้องทำgit push -uf origin masterและgit push -u origin crap_work.
zyy

31

ฉันคิดว่าคุณควรพิจารณากลยุทธ์การพัฒนาที่แตกต่างกันเพื่อป้องกันปัญหาเช่นนี้ สิ่งหนึ่งที่ดูเหมือนว่าจะได้ผลดีที่สุดสำหรับฉันคือการไม่ทำการพัฒนาโดยตรงในสาขาหลักของฉัน ไม่ว่าฉันจะทำการเปลี่ยนแปลงใดฉันมักจะสร้างสาขาใหม่สำหรับรหัสใหม่:

git checkout -b topic / topic_name master

จากนั้นฉันสามารถผลักดันการเปลี่ยนแปลงในที่เก็บสาธารณะ:

git push pu topic / topic_name

หรือในที่สุดก็รวมกลับเข้ากับสาขาหลักของฉัน:

git checkout master && git merge topic / topic_name

หากคุณต้องการย้อนเวลากลับไปในช่วงเวลาที่เก่ากว่าและตั้งเป็นเจ้านายของคุณคุณสามารถเปลี่ยนชื่อสาขาปัจจุบันเป็นอย่างอื่นจากนั้นตรวจสอบเวอร์ชันที่เก่ากว่าเพื่อเป็นเจ้านายของคุณ:

 git branch -m master ขยะ
 git co -b master old_sha1_value

นั่นเป็นนโยบายที่ดี ลองคิดดูฉันเคยเห็นที่ฝึกที่อื่น ขอบคุณ.
Rimian

14

เริ่มต้นmasterสร้างสาขาที่เรียกin-progressจากนั้นรีเซ็ตmasterเป็นคอมมิตก่อนหน้านี้

$ git branch in-progress
$ git reset --hard HEAD^

1
ฉันไม่เห็นเหตุผลที่ทำให้เรื่องนี้ถูกลงคะแนน ฉันทำมันเองสองสามครั้งก่อนที่ฉันจะเรียนรู้เกี่ยวกับสาขา -m และตระหนักว่าอาจารย์ไม่ได้ผูกติดกับชื่อถาวรของสาขาอย่างแน่นอน
skiphoppy

7

สิ่งนี้ค่อนข้างง่าย:

git checkout -b fake_master master # fake_master now points to the same commit as master
git branch -D master               # get rid of incorrect master
git checkout -b master real_master # master now points to your actual master
git checkout master                # optional -- switch on to your master branch

1
Yeap สุดท้ายเป็นทางเลือกอย่างสมบูรณ์ - git checkout -bสร้างสาขาและทำให้ใช้งานได้
BorisOkunskiy

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.