ฉันจะดึงข้อมูล repo ขึ้นมาใหม่และทำให้มันเปลี่ยนมาเป็นมาสเตอร์ได้อย่างไร ฉันมีเพียงสาขาเดียวใน repo ของฉันซึ่งเป็นผู้เชี่ยวชาญและฉันทำมันยุ่ง ๆ ดังนั้นฉันจึงต้องเริ่มต้นใหม่จากต้นน้ำ ฉันคิดว่า init จะทำงานได้ แต่มีวิธีที่ง่ายกว่านี้ไหม
ฉันจะดึงข้อมูล repo ขึ้นมาใหม่และทำให้มันเปลี่ยนมาเป็นมาสเตอร์ได้อย่างไร ฉันมีเพียงสาขาเดียวใน repo ของฉันซึ่งเป็นผู้เชี่ยวชาญและฉันทำมันยุ่ง ๆ ดังนั้นฉันจึงต้องเริ่มต้นใหม่จากต้นน้ำ ฉันคิดว่า init จะทำงานได้ แต่มีวิธีที่ง่ายกว่านี้ไหม
คำตอบ:
มี (อย่างน้อย) สองสิ่งที่คุณสามารถทำได้ที่นี่ - คุณสามารถ reco ซ้ำรีโมตรีโมตหรือคุณสามารถreset --hardไปที่บรรพบุรุษร่วมกันจากนั้นทำการดึงซึ่งจะส่งต่อไปยังคอมมิชชันล่าสุดบนมาสเตอร์ระยะไกลอย่างรวดเร็ว
เพื่อเป็นรูปธรรมต่อไปนี้เป็นคำตอบทั่วไปของ Nevik Rehnel ที่เรียบง่าย:
git reset --hard origin/master
git pull origin master
หมายเหตุ : การใช้git reset --hardจะยกเลิกการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดและอาจทำให้สับสนได้ด้วยคำสั่งนี้หากคุณยังใหม่ต่อการใช้คอมไพล์ดังนั้นให้แน่ใจว่าคุณมีความรู้สึกว่ากำลังจะทำอะไรก่อนที่จะดำเนินการต่อ
ในขณะที่อยู่ในสาขาหลัก:
git reset --hard origin/master
จากนั้นทำความสะอาดด้วยgit gc(เพิ่มเติมเกี่ยวกับเรื่องนี้ใน man pages)
ปรับปรุง: คุณจะยังอาจจะต้องทำgit fetch origin(หรือgit fetch origin masterถ้าคุณเพียงต้องการที่สาขา); ไม่สำคัญว่าคุณจะทำสิ่งนี้ก่อนหรือหลังการรีเซ็ต (ขอบคุณ @ eric-walker)
reset --hardคุณอาจจะต้องทำดึงหลัง
คุณสามารถทำได้ด้วยคำสั่งเดียว:
git fetch --all && git reset --hard origin/master
หรือในคำสั่งคู่:
git fetch --all
git reset --hard origin/master
หมายเหตุกว่าที่คุณจะสูญเสียการเปลี่ยนแปลงในท้องถิ่นของคุณทั้งหมด
git reset <hash> # you need to know the last good hash, so you can remove all your local commits
git fetch upstream
git checkout master
git merge upstream/master
git push origin master -f
voila ตอนนี้ส้อมของคุณกลับเป็นเหมือนต้นน้ำ
ในที่สุดฉันก็รู้ว่าแทนที่จะเป็นgit fetch --all && git reset --hard origin/masterเช่นนั้นควรจะเป็นgit fetch --all && git reset --hard origin/<branch_name>แทน (ถ้ามีคนทำงานในสาขาอื่น)
git gcทำความสะอาดและวิ่งผ่านการดูแลทำความสะอาดgit gcในบันทึกอื่นผมไม่เคยทำงาน การวิ่งดี แต่ไม่จำเป็น