คุณจะอัปเดต GitHub repo fork ในเว็บอินเตอร์เฟสได้อย่างไร


58

ฉันมีที่เก็บ Github ที่ฉันแยกจากโครงการอื่น ๆ เมื่อหลายเดือนก่อน ตอนนี้มันเป็นเวลาหลายเดือนต่อมาและมีการเปลี่ยนแปลงต้นแบบซื้อคืนเดิม ฉันต้องการอัปเดต repo ของฉันเพื่อให้สอดคล้องกับการเปลี่ยนแปลงเหล่านั้น เป็นไปได้ในเว็บอินเตอร์เฟส Github หรือไม่ หรือฉันต้องลบ repo และแยกอีกครั้งหรือไม่




คำตอบ:


43

คุณสามารถลองและย้อนกลับว่าคำขอการดึงเกิดขึ้นได้อย่างไร

  1. ไปที่ส้อมของคุณ
  2. ออกคำขอดึง

    โดยค่าเริ่มต้นนี่จะเป็นทางแยกของคุณทางด้านขวา ( หัวหน้าธุรกรรมซื้อคืน ) ขอให้ส่งการกระทำและการเปลี่ยนแปลงไปสู่ธุรกรรมซื้อคืนเดิม ( ฐานซื้อคืนพื้นฐาน ) ทางด้านซ้าย

  3. คลิกรายการแบบหล่นลงสำหรับ repo พื้นฐานและ repo ส่วนหัวและเลือก repos ของกันและกัน

    คุณต้องการให้คุณอยู่ในรายการด้านซ้าย (ยอมรับการเปลี่ยนแปลง) ในขณะที่ที่เก็บต้นฉบับอยู่ทางขวา (อันที่มีการเปลี่ยนแปลงที่จะผลักดัน) ดังที่แสดงในภาพนี้:

    ส้อมทำมากกว่าตัวเอง

  4. ส่งคำขอดึง

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

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


3
ยังใช้งานได้ แต่ใช่มันไม่เหมาะ แน่นอนมันเป็นเพียงเคล็ดลับ ไม่ใช่วิธีที่เหมาะสมที่จะทำ
Jake Wilson

3
ยืนยันความคิดที่ไม่ดี สิ่งนี้ทำให้พื้นที่เก็บข้อมูลสกปรกในลักษณะที่ Github แนะนำให้คุณดึงคำขอให้คอมมิทว่างเปล่ากับโปรเจ็กต์ดั้งเดิม ดูตัวอย่างgithub.com/dthommes/RoboSpring/pull/3 - เมื่อฉันสนับสนุนแล้วฉันจะซิงค์และตอนนี้ Github ต้องการให้ฉันผลัก "ซิงค์ส้อมของฉัน" ส่งข้อความเป็น "ผสานคำขอดึง # 1 จาก dthommes / master … "
usr-local-ΕΨΗΕΛΩΝ

1
ฉันไม่คิดว่ามันจะใช้งานได้อีกต่อไป แม้ว่ามันจะดูแปลก ๆ แต่ก็ไม่มีวิธีง่ายๆในการทำเช่นนี้
Toby Allen

1
ฉันเพิ่งลองและดูเหมือนจะไม่ทำงานทันที- เมื่อเปลี่ยนหนึ่งในส้อมมันจะเปิดหน้า "เปรียบเทียบการเปลี่ยนแปลง" ทันที แต่การคลิกลิงก์ "เปรียบเทียบข้ามส้อม" อนุญาตให้เปลี่ยนทางแยกอื่นได้ บางทีคุณสามารถเพิ่มบางอย่างในเอฟเฟกต์นี้ลงในคำตอบของคุณ
Peter Mortensen

4
GitHub ควรเพิ่มปุ่ม "Sync Fork" เพื่อที่คุณจะได้ไม่ต้องสร้าง PRs เป็นล้านตอนนี้ฉันกำลังใช้บรรทัดคำสั่งเพื่ออัปเดตส้อมของฉัน
Suici Doga

22

มันจะง่ายขึ้น

  1. ไปที่Forked Repo (ของคุณ)และคลิกปุ่ม - "คำขอดึงใหม่"
  2. ในหน้าเว็บที่เปิดขึ้นมาจะมีลิงก์ขนาดเล็กไปยัง "การสลับฐาน" ในข้อความภายใต้รายการแบบเลื่อนลงที่เลือก คลิกที่ลิงค์
  3. ตอนนี้มันจะนำไปสู่ ​​repo เดิมของคุณโดยอัตโนมัติ คลิกปุ่มสร้างคำขอดึงและเขียนข้อความยืนยัน
  4. ตอนนี้มันจะนำไปสู่ ​​repo ที่มีการแยกของคุณโดยอัตโนมัติคลิกผสานรวมคำขอดึงและยืนยันผสานเพื่อเสร็จสิ้น

คุณควรอธิบายให้ชัดเจนว่าปุ่มสีเขียวเหล่านั้นคืออะไรและมันจะเป็นคำตอบที่ยอดเยี่ยม ....
Rodrigo Graça

นี่เป็นคำตอบที่ดีที่สุดใน 4/2559
dr01

7
ปัญหาของวิธีนี้คือมันเพิ่มความมุ่งมั่นพิเศษให้กับสาขาของคุณดังนั้นจึงไม่สอดคล้องกับ repo ต้นน้ำจริง ๆ
Mottie

@Mottie มีวิธีที่เราจะรู้หรือไม่ว่าทางแยกของเรานั้นอยู่เบื้องหลังเวอร์ชันอัปสตรีมล่าสุดหรือไม่และเห็นความแตกต่างของการเปลี่ยนแปลงโดยไม่ดึงพวกเขาออกมาจริง ๆ
Sujay Phadke

1
@SujayPhadke บนหน้า repo หลักของคุณภายใต้ปุ่มเลือกสาขาจะมีข้อความ "สาขานี้คือ xx มุ่งหลัง xxxx: master" สำหรับการเห็นความแตกต่างจะมีปุ่ม "เปรียบเทียบ" ในแถวเดียวกับข้อความ หรือคุณสามารถไปที่ลิงค์นี้:https://github.com/{user}/{forkedRepoName}/compare/master...{originalRepo}:master
Mottie

3

วิธีอัปเดต GitHub ที่เป็นทางแยกที่มีการเปลี่ยนแปลงจากที่เก็บข้อมูลอัปสตรีมระยะไกล


คำแนะนำจาก GitHub ช่วยเหลือ:

การกำหนดค่า Remote Fork

การซิงค์ส้อม


คำแนะนำในการตั้งค่า / การใช้งาน:

เปิด Git Bash (Windows) หรือ Linux / Mac Terminal

หากคุณยังไม่ได้โคลนที่เก็บข้อมูลของคุณคุณต้องเปลี่ยนเป็นไดเรกทอรีการทำงานของโฟลเดอร์การพัฒนาของคุณและโคลนไปยังเวิร์กสเตชันของคุณ

$ git clone https://github.com/YOUR_USERNAME/YOUR_FORK.git

เปลี่ยนเป็นไดเร็กทอรีการทำงานของ repo ที่มีการแยกของคุณบนเวิร์กสเตชันของคุณ

$ cd /user/development/my_forked_repo/

แสดงรายการที่เก็บข้อมูลรีโมตที่กำหนดค่าปัจจุบันสำหรับ fork ของคุณ

 $ git remote -v

origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)

ระบุที่เก็บรีโมตอัปสตรีมระยะไกลใหม่ที่จะซิงค์กับทางแยก

$ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git

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

$ git remote -v

origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)

ดึงกิ่งไม้และการกระทำที่เกี่ยวข้องจากที่เก็บต้นน้ำ มุ่งมั่นที่จะโทจะถูกเก็บไว้ในสาขาท้องถิ่นต้นน้ำ / ต้นแบบ

$ git fetch upstream

remote: Counting objects: 75, done.
remote: Compressing objects: 100% (53/53), done.
remote: Total 62 (delta 27), reused 44 (delta 9)
Unpacking objects: 100% (62/62), done.
From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY
 * [new branch]      master     -> upstream/master

ตรวจสอบสาขาหลักของท้องถิ่นของคุณ

$ git checkout master

Switched to branch 'master'

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

$ git merge upstream/master

Updating a422352..5fdff0f
Fast-forward
README                    |    9 -------
README.md                 |    7 ++++++
 2 files changed, 7 insertions(+), 9 deletions(-)
 delete mode 100644 README
 create mode 100644 README.md

หากสาขาในประเทศของคุณไม่มีข้อผูกมัดใด ๆ Git จะทำการ "กรอไปข้างหน้า" แทน:

$ git merge upstream/master

Updating 34e91da..16c56ad
Fast-forward
 README.md                 |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

ตอนนี้คุณจะต้องผลักดันการกระทำที่จะแยกของคุณ

$ git push

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


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