นี่คือสิ่งที่ฉันใช้บ่อย:
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
หมายเหตุว่ามันคือการปฏิบัติที่ดีที่จะไม่ทำให้เกิดการเปลี่ยนแปลงที่จะโทท้องถิ่นของคุณ / พัฒนาสาขา แต่แทนที่จะเช็คเอาท์ไปยังสาขาสำหรับการเปลี่ยนแปลงใด ๆ อีกด้วยชื่อสาขาใช้ได้ตามประเภทของการเปลี่ยนแปลงเช่นfeat/
, chore/
, fix/
ฯลฯ ดังนั้นคุณจำเป็นต้องเท่านั้น ดึงการเปลี่ยนแปลงไม่ใช่ผลักการเปลี่ยนแปลงใด ๆ จากต้นแบบ สิ่งเดียวกันสำหรับสาขาอื่น ๆ ที่คนอื่นมีส่วนร่วม ดังนั้นควรใช้ข้างต้นหากคุณได้ทำการเปลี่ยนแปลงสาขาที่ผู้อื่นมุ่งมั่นและจำเป็นต้องรีเซ็ต มิฉะนั้นในอนาคตหลีกเลี่ยงการผลักดันไปยังสาขาที่คนอื่น ๆ ผลักดันให้แทนเช็คเอาต์และผลักดันไปยังสาขาดังกล่าวผ่านสาขาที่เช็คเอาท์
หากคุณต้องการรีเซ็ตสาขาในพื้นที่ของคุณเป็นความมุ่งมั่นล่าสุดในสาขาต้นน้ำสิ่งที่ได้ผลสำหรับฉันคือ:
ตรวจสอบรีโมทคุณให้แน่ใจว่าคุณต้นน้ำและแหล่งกำเนิดเป็นสิ่งที่คุณคาดหวังว่าหากไม่ได้ตามที่คาดไว้จากนั้นใช้git remote add upstream <insert URL>
เช่นเดิม GitHub repo git remote add origin <insert URL of the forked GitHub repo>
ที่คุณคดเคี้ยวจากและ
git remote --verbose
git checkout develop;
git commit -m "Saving work.";
git branch saved-work;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force
บน GitHub คุณสามารถเช็คเอาต์สาขาที่มีชื่อเดียวกันกับสาขาท้องถิ่นเพื่อบันทึกงานที่นั่นแม้ว่าจะไม่จำเป็นถ้าการพัฒนาที่มามีการเปลี่ยนแปลงเช่นเดียวกับสาขางานที่บันทึกไว้ในท้องถิ่น ฉันกำลังใช้สาขาการพัฒนาเป็นตัวอย่าง แต่อาจเป็นชื่อสาขาที่มีอยู่
git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop
จากนั้นหากคุณต้องการรวมการเปลี่ยนแปลงเหล่านี้กับสาขาอื่นในขณะที่มีความขัดแย้งใด ๆ รักษาการเปลี่ยนแปลงในการพัฒนาใช้:
git merge -s recursive -X theirs develop
ในขณะใช้งาน
git merge -s recursive -X ours develop
เพื่อรักษาการเปลี่ยนแปลงที่ขัดแย้งกันของ branch_name มิฉะนั้นใช้ mergetool git mergetool
ด้วย
ด้วยการเปลี่ยนแปลงทั้งหมดเข้าด้วยกัน:
git commit -m "Saving work.";
git branch saved-work;
git checkout develop;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
git add .;
git commit -m "Reset to upstream/develop";
git push --force origin develop;
git checkout branch_name;
git merge develop;
โปรดทราบว่าแทนที่จะอัปสตรีม / พัฒนาคุณสามารถใช้แฮชการกระทำชื่อสาขาอื่น ๆ ฯลฯ ใช้เครื่องมือ CLI เช่น Oh My Zsh เพื่อตรวจสอบว่าสาขาของคุณเป็นสีเขียวแสดงว่าไม่มีอะไรที่ต้องทำและไดเรกทอรีการทำงานสะอาด ( ซึ่งได้รับการยืนยันหรือตรวจสอบโดยgit status
) โปรดทราบว่านี่อาจเพิ่มคอมมิทเมื่อเทียบกับการพัฒนาอัปสตรีมหากมีสิ่งใดที่เพิ่มโดยอัตโนมัติเช่นคอมมิทแผนภาพ UML, ส่วนหัวลิขสิทธิ์ ฯลฯ ดังนั้นในกรณีนี้คุณสามารถดึงการเปลี่ยนแปลงorigin develop
ไปupstream develop
ได้หากจำเป็น
git status
คำสั่งที่สองของคุณgit reset --hard HEAD
ล้มเหลว อย่างไรก็ตามคุณไม่ได้วางผลลัพธ์ลง →คำถามที่ไม่สมบูรณ์