ฉันจะซิงค์ทางแยกจากต้นฉบับได้อย่างไร


33

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

ขอบคุณ


ฉันเขียนคำแนะนำง่ายๆ ลองดูที่นี่: webapps.stackexchange.com/a/58140/63016
ยองแจ

2
ตอนนี้มีเอกสารอย่างเป็นทางการที่ทำได้ดีมาก: help.github.com/articles/syncing-a-fork
Andre Miras

คำตอบ:


36

จากการออกแบบการฟอร์กโครงการจะสร้าง repo แยกต่างหากซึ่งไม่ได้รับการอัพเดตเมื่อมีการเปลี่ยนแปลง repo ดั้งเดิม อย่างไรก็ตามgitทำให้ง่ายต่อการอัพเดทด้วยตนเอง

คุณต้องการความช่วยเหลือของพื้นที่เก็บข้อมูลที่ 3 (พอเพียงสำเนาของคุณ) มี 3 repos:

  • "Upstream": ที่เก็บของโครงการต้นน้ำบน Github
  • "Origin": พื้นที่เก็บข้อมูลของคุณบน Github
  • "Local": ที่เก็บในเครื่องคอมพิวเตอร์ของคุณ ผมจะถือว่าคุณสร้างมันขึ้นมาจากโคลนส้อมใช้และทุกคนที่ใช้สาขาgit clone git@github.com:your-username/projectname.gitmaster

ในปัจจุบันสมมติว่า "Origin" และ "Local" อยู่ในสถานะเดียวกันและ "Upstream" อยู่ข้างหน้าด้วย 1 หรือมากกว่าคอมมิท (การรวมและการเปลี่ยนแปลงที่ตามมา)

ก่อนเพิ่มโครงการต้นน้ำเป็นระยะไกล Git :

git remote add upstream https://github.com/upstream-username/projectname.git

จากนั้นดึง (หมายถึงดึงข้อมูลแล้วผสานโดยอัตโนมัติ) การเปลี่ยนแปลงจากmasterสาขาของรีโมตไปยังสาขาปัจจุบัน ( master) ของที่เก็บโลคัลของคุณ:

git pull upstream master

ตอนนี้ที่เก็บข้อมูลในเครื่องของคุณซิงค์upstreamแล้ว ในที่สุดผลัก repo ท้องถิ่นของคุณไปยัง Github ส้อม:

git push origin master

ตอนนี้ทุกอย่างกำลังซิงค์กัน


2
ขอบคุณมาก .. มันเป็นความอัปยศที่นี้อาจไม่เป็นไปได้ที่จะทำให้เห็นว่าในเว็บอินเตอร์เฟส ..
Ban

1
นี่เป็นไปได้จริงบนเว็บอินเตอร์เฟส: webapps.stackexchange.com/a/31010/10390
thSoft

Yeehaw! ฉันพยายามจะค้นหาข้อมูลที่ชัดเจนนี้ ขอบคุณสำหรับการแบ่งปัน!
pepoluan

... แต่โปรดดูความคิดเห็นของคำตอบด้วยเพื่อพิสูจน์ว่าการซิงค์ผ่านเว็บไม่ใช่ตัวเลือกที่ดีที่สุดเพราะมันส่งผลเสียต่อที่เก็บ
usr-local-ΕΨΗΕΛΩΝ

คุณจะทำอย่างไรเมื่อมันบอกว่า "ทันสมัยแล้ว" หลังจากดึง แต่มันไม่ชัด? (มีไฟล์ผมเปลี่ยนทั้งหมดในหนึ่งไดเรกทอรีย่อยและฉันควรจะมีความแตกต่างในไฟล์อื่น ๆ ไม่มี แต่ฉันทำ)
โรแบร์โตโทมัส

1

คุณต้องเพิ่มรีโมต (ดูวิธีใช้GitHub ) และดึงจากรีโมตใหม่นั้น

git remote add mainProject https://github.com/user/mainProject
git pull mainProject master

0

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

คำตอบสั้น ๆ คือในการอัพเดตทางแยกของคุณกับทุกสาขาบนที่เก็บข้อมูลต้นน้ำให้ดำเนินการคำสั่งนี้

for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git push origin refs/remotes/upstream/$branch:refs/heads/$branch; done

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

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