ฉันจะแยกส่วนของฉันให้ตรงกันได้อย่างไรโดยไม่ต้องเพิ่มรีโมทแยก


302

สมมติว่ามีพื้นที่เก็บข้อมูลsomeone/foobarบน GitHub me/foobarซึ่งผมจะคดเคี้ยว

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

เป้าหมายคือ:

  • git pull เพื่อดึงข้อมูลจากที่เก็บข้อมูลหลัก
  • git push เพื่อส่งทุกอย่างให้ฉัน

26
คำตอบที่น่าประหลาดใจโดย @Olufemi ดูเหมือนจะทำในสิ่งที่คุณต้องการยกเว้นว่า ChristianGosch จดบันทึกในความคิดเห็นคุณจะจบลงด้วย "ผสานการกระทำ" ที่ด้านบนสุดของสาขาของคุณและ "ไม่มีอะไรที่จะเปรียบเทียบ" จะไม่ปรากฏขึ้น ดูเหมือนจะไม่เป็นที่ยอมรับในหลาย ๆ โครงการที่คุณต้องการสร้างสาขาให้พวกเขาดึง ดังนั้นจึงไม่มีวิธีการทำขั้นพื้นฐานที่สุดของเวิร์กโฟลว์ผู้มีส่วนร่วมใน GitHub โดยไม่ต้องใช้คำสั่ง arcane git บนคอมพิวเตอร์ส่วนบุคคลหรือไม่? หรือบางทีฉันควรทิ้ง repo ทั้งหมดของฉันและนำทุกครั้งที่ฉันต้องการมีส่วนร่วม?
nealmcb

สำเนาซ้ำซ้อนที่เป็นไปได้ของgithub, update forked project
mpromonet



@nealmcb ไม่ใช่ปัญหาของ "การรวมการกระทำ" ที่ด้านบนสุดของสาขาของคุณหรือไม่หากคุณรีบูท
Marko

คำตอบ:


586

เปิดพื้นที่เก็บข้อมูล Git คดเคี้ยวฉัน / foobar

คลิกที่เปรียบเทียบ :

นี่คือภาพตัวอย่างของหน้า

คุณจะได้รับการแจ้งเตือน:

ไม่มีอะไรให้เปรียบเทียบ
คนต้นแบบขึ้นอยู่กับวันที่มีการกระทำทั้งหมดออกจากฉัน: ต้นแบบ ลองสลับฐานสำหรับการเปรียบเทียบของคุณ

คลิกที่เปลี่ยนฐานในหน้านี้:

นี่คือตัวอย่างในหน้า

จากนั้นคุณจะได้เห็นความมุ่งมั่นทั้งหมดที่เกิดขึ้นกับใครบางคน / foobarหลังจากวันที่คุณแยกมัน

คลิกที่สร้างคำขอดึง :

นี่คือหน้าตัวอย่าง

ให้คำขอดึงชื่อและบางทีคำอธิบายและคลิกสร้างคำขอดึง

ในหน้าถัดไปเลื่อนไปด้านล่างของหน้าและคลิกคำขอดึงผสานและยืนยันการผสาน

ที่เก็บ Git me / foobar ของคุณจะได้รับการอัปเดต

แก้ไข: ตัวเลือกการรีบูตจะแสดงที่นี่:

ป้อนคำอธิบายรูปภาพที่นี่


50
สิ่งนี้ทำให้เกิดความสับสนเพราะเมื่อคุณสลับ gitub ฐานโยนคุณในหน้าสำหรับ repo เดิมดังนั้นดูเหมือนว่าคุณกำลังเปิดคำขอดึงที่ส้อมต้นน้ำ แต่มันใช้งานได้อย่างสมบูรณ์
Eduardo

8
เพื่อหลีกเลี่ยงความสับสนกับสถานการณ์ดังกล่าวข้างต้นก็ควรที่จะคลิกEditปุ่มและตนเองเปลี่ยนbase forkไปme/foobarและจะhead fork someone/foobarด้วยวิธีนี้มันชัดเจนมาก
macemers

26
อีกอันหนึ่ง: วิธีนี้ใช้ได้ผลดีหากคุณไม่เคยทำมาก่อน แต่หลังจากนั้นก็มี "ผสานการกระทำ" อยู่ด้านบนของประวัติการกระทำของคุณ ดังนั้น "ไม่มีอะไรที่จะเปรียบเทียบ" จะไม่ปรากฏขึ้น แต่จะต้องใช้ปุ่ม "แก้ไข" และทำการแลกเปลี่ยนฐานและทางแยกด้วยตนเอง
Christian Gosch

26
จะไม่มีวิธีกำจัดการผสานที่ไร้สาระหรือไม่?
kumarharsh

17
@kumar_harsh ตั้งแต่เดือนกันยายน 2559ตอนนี้มีตัวเลือก "การรีบูตและผสาน" สำหรับการร้องขอแบบดึงที่หลีกเลี่ยงการรวม
วัลลภ

41
git remote set-url origin git@github.com:someone/foobar
git remote set-url origin --push git@github.com:me/foobar

มีข้อแม้อยู่ข้อหนึ่งข้อ
นี้เหมาะอย่างยิ่งหากคุณเป็นผู้เดียวที่เปลี่ยนแปลงทางเลือกของคุณ
อย่างไรก็ตามหากมีการแชร์กับคนอื่นคุณอาจต้องดึงออกจากทางแยกของคุณซึ่งในกรณีนี้รีโมตแยกต่างหากเป็นทางออกเดียว

แก้ไข: ที่
จริงแล้วคุณสามารถ git pull git@github.com:me/foobarลบข้อแม้ได้
ตัวเลือกคือสิ่งที่คุณจำได้ง่ายกว่า


8

ฉันใช้วิธีการที่ค่อนข้างง่ายโดยใช้ GitHub Web UIเพื่อทำสิ่งนี้:

  1. เปิดที่เก็บ Git ดั้งเดิม (ไม่ใช่ที่เก็บ Git ที่ถูกแยกme/foobar)
  2. ข้ามไปที่โฟลเดอร์ src และเปิดไฟล์ที่คุณต้องการเปลี่ยน
  3. คลิกที่ไอคอนปากกา มันจะสร้างฉลากในส้อมส่วนตัวของคุณที่ชื่อว่า "patch-1" โดยอัตโนมัติตามเวอร์ชั่นปัจจุบันของที่เก็บหลัก: ป้อนคำอธิบายภาพที่นี่
  4. สนุก! ป้อนคำอธิบายภาพที่นี่

3
ลองใช้วิธีนี้โดยทั่วไปจะเปิดตัวแก้ไขไฟล์ใน repo git ดั้งเดิม ฉันไม่มีสิทธิ์เขียน (โดยการออกแบบ) ใน repo git ดั้งเดิม ดูเหมือนว่าสำหรับวิธีนี้คุณต้องเปลี่ยนไฟล์มิฉะนั้นจะไม่มีวิธี "บันทึก" ไฟล์ หากไม่มีการบันทึกไฟล์ฉันไม่สามารถเทียบเท่าสาขา "patch-1" ของคุณเพื่อแสดงในที่เก็บแบบแยกของฉัน สิ่งที่ฉันหายไปที่นี่?
Electro-Bunny

5

"ดึง" แอปเป็นอัตโนมัติวิธีการแก้ปัญหาการตั้งค่าและลืม มันจะซิงค์สาขาเริ่มต้นของทางแยกของคุณกับที่เก็บอัปสตรีม

ไปที่ URL คลิกปุ่ม "ติดตั้ง" สีเขียวและเลือกที่เก็บที่คุณต้องการเปิดใช้งานการซิงโครไนซ์อัตโนมัติ

สาขาจะได้รับการอัพเดทหนึ่งครั้งต่อชั่วโมงโดยตรงบน GitHub บนเครื่องของคุณคุณจะต้องดึงสาขาหลักเพื่อให้แน่ใจว่าสำเนาในเครื่องของคุณตรงกัน

นอกจากนี้ยังมีคำตอบในhttps://stackoverflow.com/a/58965171/946850


1

อีกตัวเลือกหนึ่งคือใช้Update from upstreamRepoName/masterปุ่มใน GitHub สำหรับ Mac (และฉันถือว่า GitHub สำหรับ Windows)

ป้อนคำอธิบายภาพที่นี่


TIL: มีแอพสำหรับ GitHub นอกเหนือจากเว็บอินเตอร์เฟส :-) [และมันเป็นความอัปยศที่ประสบการณ์ของพวกเขาไม่ได้รวมอยู่ด้วย)
Tom Goodfellow

ฉันไม่เห็นสิ่งนี้ใน Windows
Denis

1
@Denis นี่เป็นแอปเก่าของพวกเขา ฉันไม่แน่ใจว่าแอพใหม่ของพวกเขามี
Steve Moser

เอเอชเอ สิ่งนี้ใช้ได้ใน "GitHub Desktop" (สำหรับ Mac ไม่แน่ใจเกี่ยวกับ Windows)
michaelok

0

ฉันไม่รู้ว่าจะสามารถทำได้อย่างไรโดยไม่เพิ่มรีโมตตัวอื่น แต่ฉันมักจะเพิ่ม repo ที่ฉันแยกจากกันเป็นupstreamรีโมตดังนั้นฉันสามารถทำได้:

git branch -a|grep remotes/upstream| while IFS="/" read p r b; do echo Syncing $r/$b to origin/$b; git push origin $r/$b:refs/heads/$b; done

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

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