Git ดึงสาขาจากที่เก็บอื่นหรือไม่


90

ฉันมีที่เก็บ git ในเครื่องซึ่งเป็นโคลนของที่เก็บบน github มีคนแยกที่เก็บและทำการเปลี่ยนแปลงในสาขาใหม่ในที่เก็บใหม่ ฉันต้องการย้ายสาขาใหม่นี้ไปยังที่เก็บของฉัน (ในเครื่องเพื่อทำงานกับสาขานี้ก่อนที่จะรวมกับหลัก)

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

error: Your local changes to the following files would be overwritten by merge.

ดังนั้นฉันจะดึงสาขาในที่เก็บอื่นไปยังสาขาใหม่บนที่เก็บในเครื่องของฉันได้อย่างไร

ฉันหวังว่ามันจะสมเหตุสมผล ถ้าไม่ใช่นี่คือที่เก็บของฉัน: https://github.com/MatthewLM/cbitcoin

อย่างที่คุณเห็นมีคนสร้างที่เก็บใหม่ด้วยสาขา "linuxBuild": https://github.com/austonst/cbitcoin/tree/linuxBuild

ฉันต้องการสาขานั้นในพื้นที่เก็บข้อมูลท้องถิ่นของฉันสำหรับ MatthewLM / cbitcoin

ฉันจะทำเช่นนี้ได้อย่างไร?

คำตอบ:


161

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


หากคุณต้องการสร้างโครงสร้างสาขาของส้อมในที่เก็บในเครื่องของคุณใหม่คุณสามารถทำสิ่งต่อไปนี้:

git remote add fork <url of fork>
git fetch fork
git checkout -b fork_branch fork/<branch>

สิ่งนี้จะสร้างสาขาท้องถิ่นที่fork_branchมีประวัติเดียวกันเช่น<branch>ในทางแยกกล่าวคือfork_branchจะแยกสาขาออกจากmasterตำแหน่งที่คุณ<branch>ทำในส้อม นอกจากนี้สาขาในพื้นที่ของคุณจะติดตามสาขานั้นในทางแยกดังนั้นคุณจึงสามารถดึงการเปลี่ยนแปลงใหม่ ๆ ที่เกิดขึ้นในส้อมได้อย่างง่ายดาย

ฉันคิดว่าคุณยังต้องตรวจสอบให้แน่ใจก่อนว่าสำเนางานของคุณไม่มีการเปลี่ยนแปลงใด ๆ


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

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

@MatthewMitchell: โปรดตรวจสอบการอัปเดต นั่นคือสิ่งที่คุณกำลังมองหาใช่ไหม
Daniel Hilgarth

ฉันใช้วิธีการรวมเข้ากับสาขาอื่น (ฉันเพิ่งรวมเข้ากับต้นแบบ) ในตอนท้าย แต่ในกรณีที่ฉันต้องการเพียงแค่สาขาตรงตามที่มาจากที่เก็บอื่นฉันจะลองดึงข้อมูลและ วิธีการชำระเงินที่คุณอธิบายไว้ ขอบคุณ.
Matthew Mitchell

ใช้เพื่อย้ายสาขา "gh-pages" จาก repo อื่น!
Marcello de Sales

39

วิธีการโดยไม่ต้องเพิ่มระยะไกล

git checkout --orphan fork_branch
git reset --hard
git pull <url of fork> <branch>

2
ขอบคุณสำหรับสิ่งนี้ฉันได้บุ๊กมาร์กไว้และกลับมาดูต่อ
Shane Smiskol

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