รวม git repo เข้ากับสาขาของ repo อื่น


122

รับ repo Foo และ repo Bar ฉันต้องการที่จะผสานกับบาร์ฟูแต่bazเพียงเป็นสาขาย่อยที่เรียกว่า

git checkout -b baz <= ใส่ Bar repo ที่นี่

คำตอบ:


232

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

$ ls
foo bar

เปลี่ยนเป็นที่fooเก็บ:

$ cd foo

เพิ่มที่barเก็บเป็นรีโมตและดึงข้อมูล:

$ git remote add bar ../bar
$ git remote update

สร้างสาขาใหม่bazในที่fooเก็บตามสาขาปัจจุบันของคุณ:

$ git checkout -b baz

ผสานสาขาsomebranchจากที่barเก็บลงในสาขาปัจจุบัน:

$ git merge --allow-unrelated-histories bar/somebranch

( --allow-unrelated-historiesไม่จำเป็นต้องใช้ก่อน git เวอร์ชัน 2.9)


21
เนื่องจาก git 2.9 คุณอาจต้องเพิ่ม--allow-unrelated-historiesคำสั่ง git merge
Drasill

2
ข้อมูลเกี่ยวกับความคิดเห็นจาก @Drasill: github.com/git/git/blob/master/Documentation/RelNotes/…
GaTechThomas

10
ฉันไม่รู้ว่าฉันกำลังทำอะไรอยู่และฉันไม่สามารถอ่านสิ่งนี้ด้วยตัวยึดตำแหน่ง foo / bar ได้ ใครสามารถแก้ไขสิ่งนี้ด้วยตัวอย่างชีวิตจริง (เช่นลิงก์ตามความเหมาะสม)
rien333

โอนี่เยี่ยมมาก ฉันต้องการรวมเป็นไดเรกทอรีย่อย มันไม่สามารถแตกต่างกันได้ใช่มั้ย? ฉันต้องการเพิ่มขั้นตอนนั้น
macetw

1
ฉันได้รับความขัดแย้งในการผสานมากมาย อย่างไรก็ตามคุณสามารถบังคับให้รวมเป็นสาขาใหม่ได้หรือไม่?
nomadoda

41

อัปเดตด้วยคำสั่ง "ชีวิตจริง":

เริ่มจากไดเร็กทอรี repo ของคุณตรวจสอบให้แน่ใจว่าสำเนาการทำงานของคุณสะอาด (ไม่มีไฟล์เปลี่ยนแปลงเพิ่มหรือลบออก)


สร้างสาขาใหม่:

git checkout -b <my-branch>

เพิ่มรีโมตสำรองจากนั้นดึงข้อมูล:

git remote add <repo-name> git@github.com:xxx/<repo-name>.git
git remote update

รวมสาขาหนึ่งในสาขาปัจจุบันของคุณ:

git merge <repo-name>/<their-branch>


หากคุณไม่ทราบว่า<their-branch>คุณต้องการจากนั้นไปที่master

หากคุณแน่ใจว่าต้องการยอมรับการเปลี่ยนแปลงระยะไกลทั้งหมดและหลีกเลี่ยงความขัดแย้ง ( เขียนทับของคุณ ) คุณสามารถระบุ-X theirsเป็นตัวเลือกสำหรับgit mergeในขั้นตอนสุดท้าย

หากคุณต้องการเพิ่มในไดเร็กทอรีย่อยคุณควรใช้โมดูลย่อย git


3

ด้วยคำแนะนำจาก larsks ฉันสามารถทำได้โดยใช้ SourceTree

  1. สร้างสาขาในที่เก็บปลายทาง
  2. เพิ่มที่เก็บซอร์สเป็นรีโมตโดยกดปุ่มการตั้งค่าและเพิ่มที่เก็บซอร์ส
  3. ตอนนี้สาขาจากที่เก็บทั้งสองจะแสดงในรายการสาขา ฉันใช้เครื่องมือผสานเพื่อรวมสาขาจากที่เก็บต้นทางไปยังสาขาของที่เก็บปลายทางใหม่ของฉัน
  4. แก้ไขข้อขัดแย้งโดยใช้ SourceTree หรือ IDE ของฉัน
  5. ยอมรับการเปลี่ยนแปลงในสาขาของฉัน
  6. ลบที่เก็บซอร์สออกจากรายการรีโมตโดยใช้ปุ่มการตั้งค่า
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.