Github: นำเข้าสาขาต้นน้ำเข้าสู่ทางแยก


169

ฉันมีทางแยก ( origin) จากโครงการ ( upstream) บน github ตอนนี้โครงการอัพสตรีมได้เพิ่มสาขาใหม่ฉันต้องการที่จะนำเข้าสู่ทางแยกของฉัน ฉันจะทำอย่างไร

ฉันลองตรวจสอบจากระยะไกลและสร้างสาขาด้านบนของที่ แต่กำหนดค่าสาขาวิธีที่git pushพยายามที่จะผลักดันไปที่upstream:

git checkout upstream/branch
git checkout -b branch

แก้ไข

บางทีนั่นอาจจะไม่ชัดเจน แต่ผมต้องการที่จะเพิ่มสาขาไปยังพื้นที่เก็บข้อมูลในท้องถิ่นของฉันดังนั้นฉันสามารถผลักดันให้origin(ส้อมของฉัน) git pushผ่านทาง เนื่องจากที่เก็บข้อมูลต้นน้ำมักเป็นแบบอ่านอย่างเดียวและคุณแยกไว้เพื่อสนับสนุน

ดังนั้นผมโดยทั่วไปต้องการที่จะชำระเงินเป็นสาขาที่ไม่มีอยู่ในที่มีเนื้อหาจะถูกดึงมาจากoriginupstream

คำตอบ:


262
  1. ตรวจสอบให้แน่ใจว่าคุณได้ดึงสาขาอัปสตรีมใหม่ลงใน repo ในพื้นที่ของคุณ:

    • ขั้นแรกตรวจสอบให้แน่ใจว่าแผนผังการทำงานของคุณสะอาด (กระทำ / ซ่อน / แปลงกลับการเปลี่ยนแปลงใด ๆ )
    • จากนั้นgit fetch upstreamเพื่อดึงสาขาต้นน้ำใหม่
  2. สร้างและสลับเป็นเวอร์ชันท้องถิ่นของสาขาอัปสตรีมใหม่ ( newbranch):

    • git checkout -b newbranch upstream/newbranch
  3. เมื่อคุณพร้อมที่จะผลักสาขาใหม่ให้กำเนิด :

    • git push -u origin newbranch

-uชุดสวิทช์การติดตามการระบุระยะไกล (ในตัวอย่างนี้origin)


6
ผมเชื่อว่าgit fetch upstreamเป็นตัวเลือกที่ดีกว่าที่ขั้นตอนแรกเนื่องจากgit pull upstreamต้องมีการดำเนินการมากขึ้นที่จะทำหลังจากสำหรับgit remote add ... upstream
Alexander Pavlov

git pull อัพสตรีมกลับมา: การYou asked to pull from the remote 'upstream', but did not specify a branch. Because this is not the default configured remote for your current branch, you must specify a branch on the command line.เพิ่มชื่อสาขาที่ส่วนท้ายของคำสั่งทำให้เกิดการรวมระหว่างสาขาในอัปสตรีมกับสาขาโลคัลปัจจุบันแทนการอนุญาตให้สร้างสาขาโลคัลใหม่ ความคิดใด ๆ
mMontu

1
การแทนที่git pull upstreamด้วยgit fetch upstreamแก้ไขปัญหาและทำตามขั้นตอนต่อไปนี้
mMontu

ฉันได้รับแล้ว: ร้ายแรง: ไม่สามารถอัปเดตพา ธ และเปลี่ยนเป็นสาขา 'อัปสตรีม' ได้ในเวลาเดียวกัน คุณตั้งใจจะเช็คเอาต์ 'upstream / master' ซึ่งไม่สามารถแก้ไขได้ตามที่ได้ตกลงไว้?
sureshvv

1
@sureshvv อาจเป็นเพราะคุณต้องมีการอ้างอิงระยะไกลไปยังที่เก็บข้อมูลอัปสตรีมที่ชื่ออัปสตรีมก่อนที่จะดำเนินการใด ๆ ในกรณีที่คุณไม่ได้ว่าเป็นวิธีที่คุณเพิ่มหนึ่ง: คอมไพล์ระยะไกลเพิ่ม your_git_upstream_repository_url.git อ่านสิ่งนี้หากคุณต้องการคำชี้แจงในเรื่องนั้น
Gabriel Rainha

7

ฉันจะใช้

git checkout -b <new_branch> upstream/<new_branch>

นั่นคือสิ่งที่ฉันได้ลองก่อนที่ฉันจะอธิบายในคำถาม มันนำไปสู่ผลลัพธ์เดียวกัน
กระตุ้น

4

ฉันมีปัญหากับเรื่องนี้เช่นกันและ google ก็พาฉันมาที่นี่ วิธีแก้ปัญหาใช้งานไม่ได้ ปัญหาของฉันคือเมื่อฉันเพิ่ม upstream ของฉันมันตั้งค่า git ของฉันเพื่อดึงข้อมูลหลักเท่านั้นไม่ใช่สาขาทั้งหมด เช่นมันดูเหมือนนี้

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/master:refs/remotes/upstream/master

การแก้ไข. git / config ดังนี้แก้ไขปัญหาของฉันได้

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/*:refs/remotes/upstream/*

1

ขั้นตอนต่อไปนี้ใช้งานได้ดีสำหรับฉัน (สมมติว่าชื่อสาขา upstream branch):

$ git fetch upstream
$ git checkout branch
$ git push origin

1
ฉันได้รับ git f up upstream ร้ายแรง: 'upstream' ไม่พบว่าเป็นที่เก็บ git ร้ายแรง: ไม่สามารถอ่านจากที่เก็บระยะไกล โปรดตรวจสอบว่าคุณมีสิทธิ์การเข้าถึงที่ถูกต้องและมีที่เก็บข้อมูลอยู่
ThinkDigital

0

--track?

git branch --track branch upstream/branch

บางทีฉันเข้าใจคุณผิด แต่การทำเช่นนั้นจะทำให้สาขาแตกต่างกัน กับpushpusing upstreamไป
โผล่

ไม่ฉันคิดว่าฉันเข้าใจคุณผิด
troelskn

0

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

[remote "origin"]
url = git@github.com:<your_user/org>/<repo>.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[remote "upstream"]
url = git@github.com:<upstream_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/upstream/*
[remote "other_user"]
url = git@github.com:<other_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/<other_user>/*

ตอนนี้คุณสามารถชำระเงินสาขาจาก<other_user>ทางแยกเช่นกัน

git fetch <other_user> <branch>
git checkout -b <branch> <other_user>/<branch>

ที่จะให้สาขาท้องถิ่นซึ่งมาจากทางแยก

ในการผลักดันสาขาท้องถิ่นนั้นฉันต้องเจาะจงด้วยคำสั่ง push

git push origin <branch>

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