คอมไพล์ทิ้งการเปลี่ยนแปลงทั้งหมดและดึงจากต้นน้ำ


145

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

คำตอบ:


251

มี (อย่างน้อย) สองสิ่งที่คุณสามารถทำได้ที่นี่ - คุณสามารถ reco ซ้ำรีโมตรีโมตหรือคุณสามารถreset --hardไปที่บรรพบุรุษร่วมกันจากนั้นทำการดึงซึ่งจะส่งต่อไปยังคอมมิชชันล่าสุดบนมาสเตอร์ระยะไกลอย่างรวดเร็ว

เพื่อเป็นรูปธรรมต่อไปนี้เป็นคำตอบทั่วไปของ Nevik Rehnel ที่เรียบง่าย:

git reset --hard origin/master
git pull origin master

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


1
ความช่วยเหลือเพิ่มเติมสำหรับมือใหม่ที่นั่น: git gcทำความสะอาดและวิ่งผ่านการดูแลทำความสะอาด git gcในบันทึกอื่นผมไม่เคยทำงาน การวิ่งดี แต่ไม่จำเป็น
Joshua Dance

@JoshuaDance - จุดดี ฉันไม่แน่ใจว่าทำไมฉันถึงรวมไว้ในตอนแรก
Eric Walker

23

ในขณะที่อยู่ในสาขาหลัก: git reset --hard origin/master

จากนั้นทำความสะอาดด้วยgit gc(เพิ่มเติมเกี่ยวกับเรื่องนี้ใน man pages)

ปรับปรุง: คุณจะยังอาจจะต้องทำgit fetch origin(หรือgit fetch origin masterถ้าคุณเพียงต้องการที่สาขา); ไม่สำคัญว่าคุณจะทำสิ่งนี้ก่อนหรือหลังการรีเซ็ต (ขอบคุณ @ eric-walker)


1
reset --hardคุณอาจจะต้องทำดึงหลัง
Eric Walker

ไม่จำเป็นต้องทำการดึงจากต้นแบบเมื่อการเรียก git fetch เริ่มต้นขึ้นก่อนการรีเซ็ต
sciritai

@sciritai: ความคิดเห็นของฉันถูกเพิ่มก่อนที่จะกล่าวถึงการดึงมาจากแหล่งกำเนิด
Eric Walker

19

คุณสามารถทำได้ด้วยคำสั่งเดียว:

git fetch --all && git reset --hard origin/master

หรือในคำสั่งคู่:

git fetch --all
git reset --hard origin/master

หมายเหตุกว่าที่คุณจะสูญเสียการเปลี่ยนแปลงในท้องถิ่นของคุณทั้งหมด


5
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 ตอนนี้ส้อมของคุณกลับเป็นเหมือนต้นน้ำ


0

ในที่สุดฉันก็รู้ว่าแทนที่จะเป็นgit fetch --all && git reset --hard origin/masterเช่นนั้นควรจะเป็นgit fetch --all && git reset --hard origin/<branch_name>แทน (ถ้ามีคนทำงานในสาขาอื่น)

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