การรวมกันระหว่างส้อมใน GitHub


259

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

คำตอบ:


352

คุณอาจมี "ระยะไกล" สำหรับที่เก็บแต่ละแห่ง คุณต้องดึงจากระยะไกลหนึ่งและผลักไปที่อื่น

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

git remote add firstrepo git://github.com/first/repo.git

หลังจากการตั้งค่าทั้งหมดคุณควรจะสามารถ

git pull firstrepo master
git push origin

โปรดจำไว้ว่าgit pullไม่มีอะไรมากไปกว่าแมโครที่ทำgit fetchและgit mergeในลำดับนั้น คุณเพียงแค่ต้องดึงรายการของการคอมมิทจากที่เก็บของคนแรกแล้วรวมสาขาของพวกเขาเข้ากับทรีของคุณ การผสานควรทำสิ่งที่ถูกต้องกับการกระทำของคุณทั้งสองสาขา

GitHub ในความสุดยอดตลอดของทุกคนให้ทางลัดแน่นอน มีปุ่ม "กรอไปข้างหน้า" บนทางแยกของที่เก็บที่คุณสามารถใช้เพื่อแยกทางขึ้นหากคุณรวมเข้ากับอีกด้านหนึ่งอย่างสิ้นเชิง


1
มีวิธีการทำเช่นนี้กับการดำเนินการระยะไกลทั้งหมดหรือไม่ หากฉันเข้าใจอย่างถูกต้องด้วยวิธีนี้คุณจะดาวน์โหลดการเปลี่ยนแปลงทั้งหมดไปยังที่เก็บในเครื่องแล้วอัปโหลด (กด) การเปลี่ยนแปลงทั้งหมดกลับไปที่ fork บน github ฉันต้องการที่จะดึงการเปลี่ยนแปลงทั้งหมดโดยตรงในทางแยกบน Github
Ken Liu

1
ไม่ Git ไม่สนับสนุนสิ่งนั้น โชคดีที่ Github มีปุ่มรวมอยู่ในเว็บอินเตอร์เฟสทันที
cweiske

13
@cweiske - ปุ่มผสานนี้อยู่ที่ไหน ฉันดูผ่านหน้าผู้ดูแลระบบและหน้าหลักแล้ว แต่หาไม่พบ :(
อดัม

2
@ อดัมมันอยู่ในหน้าดึงคำขอ ดังนั้นคนหางานจะเปิดคำขอดึงเพื่อรวมสาขาใดสาขาหนึ่งเข้ากับสาขาใดสาขาหนึ่งของคุณ คุณสามารถคลิกที่ปุ่มผสาน
Rob Barreca

2
ดูเหมือนว่าปุ่มกรอไปข้างหน้าจะไม่สามารถใช้งานได้อีกต่อไป สำหรับข้อมูลฉันใช้URL gitอื่นภายในคำสั่งของฉัน:git remote add snaury git@github.com:snaury/script-runner
olibre

72

ดังนั้นคำตอบที่ได้รับการยอมรับข้างต้นไม่ได้ผลสำหรับฉันอย่างสมบูรณ์แบบ กล่าวคือดูเหมือนว่าจะสูญเสียลิงก์ไปยังผู้แต่ง GitHub ดั้งเดิมเมื่อมันทำงานแล้วดูเหมือนจะไม่ทำงานอีกต่อไปหลังจากนั้น ฉันคิดว่าปัญหาคือคำตอบที่เหลือ / ระหว่างชื่อระยะไกลและสาขา ดังนั้นจะดึงสาขาที่เรียกว่ามาสเตอร์จากรีโมต แต่ไม่สามารถทำอะไรกับมันได้ ไม่แน่ใจจริงๆว่าทำไม

นี่คือวิธีที่GitHub แนะนำจากเว็บไซต์ของตน

เมื่อคุณโคลน repo ที่มีการแยกของคุณแล้วคุณจะต้องเพิ่มการชี้ระยะไกลไปยังต้นฉบับเหมือนคำตอบก่อนหน้านี้ พวกเขาชอบเรียกมันว่าต้นน้ำ แต่มันก็ไม่สำคัญ

git remote add upstream git://github.com/octocat/Spoon-Knife.git

จากนั้นคุณดึง

git fetch upstream

และคุณจะเห็นเวอร์ชันที่พร้อมสำหรับการรวม

From git://github.com/octocat/Spoon-Knife.git
 * [new branch]      gh-pages   -> upstream/gh-pages
 * [new branch]      master     -> upstream/master

จากนั้นคุณเพียงแค่ต้องเลือกสาขาที่คุณต้องการจะรวมเข้าด้วยกันโปรดทราบว่าสาขาเหล่านี้ไม่ใช่สาขาท้องถิ่น แต่หากคุณไม่มีสาขาในพื้นที่ที่เรียกว่า upstream / master (ซึ่งอนุญาต) คุณควรผสานรวมกับบรรทัดด้านล่าง:

git merge upstream/master

อีกทางหนึ่งคุณสามารถลัดการดึงข้อมูล / การผสาน (หลังจากดึงข้อมูลอย่างน้อยครั้งแรก) ด้วยบรรทัดนี้:

git pull upstream/master

ปัญหาคือว่าถ้าคุณมีการเปลี่ยนแปลงการเปลี่ยนแปลงที่คุณรวมจะสร้างการรวมการกระทำ มีประโยชน์ในบางกรณี แต่ส่วนใหญ่ไม่มีจุดหมายสักหน่อย
Pablo Olmos de Aguilera C.

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