วิธีการทำคำขอดึง GitHub


283

ฉันจะสร้างและ / หรือส่งคำขอดึงไปยังพื้นที่เก็บข้อมูลอื่นที่โฮสต์บน GitHub ได้อย่างไร


2
นี่อธิบายได้ไม่เพียงพอในหน้าช่วยเหลือของ GitHubใช่ไหม
lanzz

27
@lanzz ไม่หน้าช่วยเหลือไม่ได้มีเคล็ดลับที่มีประโยชน์บางอย่างซึ่งฉันหวังว่าฉันจะรู้ก่อนที่จะทำคำขอดึงครั้งแรกของฉัน (ดูด้านล่าง)
VonC

9
@ianzz แน่นอนหน้าของ Github นั้น "เพียงพอ" แต่มีหลายวิธีในการเรียนรู้ สิ่งที่ฉันพยายามทำคือทำแบบฝึกหัดระดับเริ่มต้น สิ่งที่ฉันพบว่าขาดในคำอธิบายของ Github คือ: 1) มันไม่ได้มีอยู่ในแหล่งเดียว (สองหน้าซึ่งไม่ได้เชื่อมโยงอย่างชัดเจน) 2) ไม่รวบรัด (หน้าเหล่านั้นยาวมาก = ยาวมาก) 3) คือ ไม่ได้อธิบายในแง่มนุษย์ในส่วนสำคัญ ในการสอนมันเป็นเรื่องยากสำหรับครูที่มีประสบการณ์มากกว่าที่จะรู้ว่ามือใหม่ไม่รู้จัก การทำให้ตัวเองอยู่ในรองเท้าของผู้เริ่มต้นคือเป้าหมายของฉันในการเขียนสิ่งนี้
ทิมปีเตอร์สัน

12
นานอาจหมายถึงการครอบงำซึ่งอาจหมายถึงการยกเลิก = ไม่มีการเรียนรู้ เราสามารถ "ทำความเข้าใจกระบวนการที่เกี่ยวข้อง" ผ่านช่องทางมากมายที่เห็นได้ชัดว่าไม่ใช่หนึ่งในนั้น เพื่อยุติสงครามเปลวไฟไม่จำเป็นต้องตอบกลับฉันเข้าใจว่าคุณมาจากไหน
tim peterson

8
คุณทำคำขอดึงจากส้อมของคุณเอง นั่นไม่ใช่ข้อสันนิษฐานเดิมของฉัน
Derek Illchuk

คำตอบ:


236

(นอกจากนี้อย่างเป็นทางการ " GitHub ความช่วยเหลือ 'ใช้การร้องขอดึงหน้า "
เห็น " ง่ามกับการแตกแขนงใน GitHub ", " ความแตกต่างระหว่างแหล่งกำเนิดต้นน้ำอะไรและใน GitHub ")

เคล็ดลับเกี่ยวกับคำขอดึง:

สมมติว่าคุณได้ซื้อคืนภาคีก่อนนี่คือสิ่งที่คุณควรทำในทางแยกที่คุณเป็นเจ้าของ:

  • สร้างสาขา : แยกการแก้ไขของคุณในสาขา อย่าสร้างคำขอดึงmasterซึ่งคุณอาจถูกล่อลวงให้สะสมและผสมการแก้ไขหลายอย่างพร้อมกัน
  • รีบูทสาขานั้น : แม้ว่าคุณได้ทำการร้องขอการดึงจากสาขานั้นแล้วการรีบูทที่ด้านบนของorigin/master(ทำให้แน่ใจว่าแพทช์ของคุณยังทำงานอยู่) จะอัปเดตคำขอการดึงโดยอัตโนมัติ (ไม่จำเป็นต้องคลิกอะไรเลย)
  • อัปเดตสาขานั้น : หากคำขอการดึงของคุณถูกปฏิเสธคุณสามารถเพิ่มคอมมิทใหม่และ / หรือทำซ้ำประวัติของคุณโดยสมบูรณ์: มันจะเปิดใช้งานคำขอการดึงที่มีอยู่ของคุณอีกครั้ง
  • "โฟกัส" ที่สาขา : คือให้หัวข้อว่า "แน่น" ไม่แก้ไขหลายพันของการเรียนและแอปทั้งหมดเพียงเพิ่มหรือแก้ไขคุณลักษณะที่ดีที่กำหนด, การรักษาที่มีการเปลี่ยนแปลงเล็ก ๆ
  • ลบสาขานั้น : เมื่อได้รับการยอมรับคุณสามารถลบสาขานั้นในส้อมของคุณ (และgit remote prune origin) ได้อย่างปลอดภัย GitHub GUI จะเสนอให้คุณลบสาขาในหน้าคำขอดึง

หมายเหตุ: ในการเขียนคำขอดึงตัวเองโปรดดูที่ " วิธีเขียนคำขอดึงสมบูรณ์ " (มกราคม 2015, GitHub)


มีนาคม 2016: ตัวเลือกปุ่มผสาน PR ใหม่: ดู " สควอช GitHub กระทำจากเว็บอินเตอร์เฟสเมื่อมีการร้องขอการดึงหลังจากแสดงความคิดเห็น? "

สควอช

ผู้ดูแลธุรกรรมซื้อคืนสามารถเลือกที่จะmerge --squashทำหน้าที่ประชาสัมพันธ์


หลังจากดึงคำขอ

เกี่ยวกับจุดสุดท้ายตั้งแต่เดือนเมษายน, 10 2013, " ปุ่มผสานการออกแบบ " สาขาจะถูกลบสำหรับคุณ:

ปุ่มผสานใหม่

การลบสาขาหลังจากที่คุณรวมได้รับการทำให้เรียบง่าย แทนการยืนยันการลบที่มีขั้นตอนพิเศษเราทันทีลบสาขาเมื่อคุณลบมันและให้การเชื่อมโยงที่สะดวกในการเรียกคืนสาขาในกรณีที่คุณต้องการมันอีกครั้ง

ที่ยืนยันวิธีปฏิบัติที่ดีที่สุดของการลบสาขาหลังจากรวมคำขอดึง


ดึงคำขอกับดึงคำขอ


e-notes สำหรับ "reposotory" (sic)

<humour>

GitHub นั้นไม่ได้กำหนดคำขอดึง (pull pull) อย่างถูกต้อง!

โชคดีที่องค์กรข่าวธุรกิจที่แท้จริงจะรู้และมีe-note เพื่อแทนที่ pull-replace โดย 'e-note' :

https://pbs.twimg.com/media/BT_5S-TCcAA-EF2.jpg:large

ดังนั้นถ้าคุณ Repos o tory ต้องการ E-ทราบ ... ขอให้ธุรกิจฟ็อกซ์ พวกเขาอยู่ในความรู้

</humour>


2
- @ VonC ขอบคุณสำหรับสิ่งนี้ คุณช่วยส่งรหัสเพื่อชี้ให้เห็นว่าสิ่งที่คุณพูดแตกต่างจากสิ่งที่ฉันพูดหรือไม่ การตัดสินใจbranchเทียบกับmasterดูเหมือนจะเป็นสิ่งสำคัญสำหรับการตอบ / Github ของฉันจากการแก้ปัญหาเชิงทฤษฎีกับสิ่งที่เราจะใช้จริง ๆ
ทิมปีเตอร์สัน

1
@timpeters ในความจริงที่ว่าคุณสามารถเปลี่ยนประวัติภายในสาขานั้นได้อย่างสมบูรณ์และมันจะอัปเดตคำขอดึงโดยอัตโนมัติเป็นกุญแจสำคัญที่นี่: เนื่องจากคำขอดึงข้อมูลต้องทำในโครงการอัปสตรีมล่าสุด หาก repo อัปสตรีมนั้นมีการคอมมิทใหม่คุณต้องรีบูทสาขาของคุณด้านบนสุด (เปลี่ยนประวัติของสาขานั้น) และดันกลับไปที่ทางแยกของคุณ: ที่จะอัปเดตคำขอการดึงของคุณ (ตามสาขาเดียวกัน) โดยอัตโนมัติ
VonC

4
ฉันไม่เข้าใจส่วนที่นำกลับมาใช้ใหม่ มันทำอะไร ( หน้านี้ทำให้ดูเหมือนวิทยาศาสตร์จรวด แต่ฉันเชื่อว่าไม่ใช่) คุณจะออกคำสั่งอะไรในตอนนั้นว่า "rebases"
Camilo Martin

1
@CamiloMartin ถ้าคุณอยู่ในสาขาประชาสัมพันธ์ของคุณแล้วเป็นgit pull --rebase upstream/masterสิ่งที่ดีแน่นอน
VonC

1
@vikramvi master เป็นสาขาที่เหมือนกับ repo ดั้งเดิมที่คุณแยกออกมา สาขานั้นควรสะท้อน repo ดั้งเดิมเสมอ คุณแยกการแก้ไขของคุณในสาขาสำหรับการประชาสัมพันธ์ของคุณ คุณใช้หลักเป็นเพียงวิธีที่จะรู้ว่ามีอะไรอยู่ใน repo ดั้งเดิม (และรีบูทสาขาแก้ไขของคุณด้านบนของมันเพื่อให้แน่ใจว่าการรวมคำขอดึงง่าย)
VonC

202

หากต้องการเรียนรู้วิธีสร้างคำขอดึงฉันเพิ่งทำตามหน้าช่วยเหลือสองหน้าใน Github (ลิงก์ด้านล่างเป็นสัญลักษณ์หัวข้อย่อย) คำสั่งบรรทัดคำสั่งต่อไปนี้สำหรับส่วนที่ 1 ส่วนที่ 2คำขอการดึงที่แท้จริงทำบนเว็บไซต์ของ Github ทั้งหมด

$ git clone https://github.com/tim-peterson/dwolla-php.git
$ cd dwolla-php
$ git remote add upstream https://github.com/Dwolla/dwolla-php.git
$ git fetch upstream
// make your changes to this newly cloned, local repo 
$ git add .
$ git commit -m '1st commit to dwolla'
$ git push origin master
  • ส่วนที่ 1 : แยกส่วนซื้อของใครบางคน: https://help.github.com/articles/fork-a-repo

    1. คลิกปุ่ม 'fork' บน repo ที่คุณต้องการมีส่วนร่วมในกรณีนี้: repo PHP ของ Dwolla (Dwolla / dwolla-php)
    2. รับ URL สำหรับทางแยกที่สร้างขึ้นใหม่ของคุณในกรณีนี้: https://github.com/tim-peterson/dwolla-php.git (tim-peterson / dwolla-php)
    3. พิมพ์git clone->cd dwolla-php->git remote->git fetchลำดับข้างบนเพื่อคัดลอกส้อมของคุณที่ใดที่หนึ่งในคอมพิวเตอร์ของคุณ (เช่น "คัดลอก / วาง" ในกรณีนี้third_party TimPeterson$:) และซิงค์กับ repo หลัก (Dwolla / dwolla-php)
    4. ทำการเปลี่ยนแปลง repo ท้องถิ่นของคุณ
    5. พิมพ์git add->git commit->git pushลำดับข้างต้นเพื่อผลักดันการเปลี่ยนแปลงของคุณไปยัง repo ระยะไกลเช่นทางแยกของคุณใน Github (tim-peterson / dwolla-php)
  • ส่วนที่ 2 : ทำการร้องขอการดึง: https://help.github.com/articles/using-pull-requests

    1. ไปที่หน้าเว็บส้อมของคุณบน Github ( https://github.com/tim-peterson/dwolla-php )
    2. คลิกปุ่ม 'ดึงคำขอ'
    3. ตั้งชื่อคำขอดึงข้อมูลกรอกรายละเอียดการเปลี่ยนแปลงที่คุณทำคลิกปุ่มส่ง
    4. คุณทำเสร็จแล้ว !!

4
- @ alexgray ฉันออกจาก bash prompt เช่นTims-MacBook-Pro:third_party TimPeterson$เพราะนี่คือการสอนสำหรับผู้เริ่มต้นและการแจ้งเตือนเหล่านั้นจะช่วยปรับทิศทางผู้ใช้
ทิมปีเตอร์สัน

1
ใช่. ขอบคุณ. ตัวอย่างการทำงานที่ฉันสามารถติดตามได้ ทำไมคุณไม่มีฮับ git นั้น
สิบเจ็ด

หลังจากที่git fetch upstreamคุณไม่จำเป็นต้องผสานการเปลี่ยนแปลงต้นน้ำพร้อมสำเนาท้องถิ่นของคุณโดยใช้git checkout masterแล้วgit merge upstream/master?
Sparhawk

@Sparhawk ไม่คุณไม่จำเป็นต้องรวมการเปลี่ยนแปลงของคุณเข้ากับต้นแบบที่อยู่ในส้อมของคุณ คำขอดึงไปยังธุรกรรมซื้อคืนอื่นสามารถอ้างอิงได้จากสาขาเท่านั้น อย่างไรก็ตามโดยปกติแล้วจะเป็นการดีสำหรับคุณที่จะอัปเดตมาสเตอร์ของคุณตามที่คุณไปด้วยดังนั้นการเปลี่ยน repo "ของจริง" และนำกลับมาใช้ซ้ำในลูปใน repo ที่ถูกแยกของคุณ
ely

1
@HimanshuShekhar ใช่ แต่คุณต้องใช้แอปเดสก์ท็อป Github หรือ API ของพวกเขา เบราว์เซอร์นั้นง่ายกว่าสำหรับฉัน
ทิมปีเตอร์สัน

70

ในการสร้างคำขอดึงคุณต้องทำตามขั้นตอนต่อไปนี้:

  1. แยกที่เก็บ (ที่คุณต้องการสร้างคำขอดึง) เพียงคลิกที่ปุ่มส้อมที่หน้าพื้นที่เก็บข้อมูลและคุณจะมีที่เก็บ GitHub แยกต่างหากนำหน้าด้วยชื่อผู้ใช้ GitHub ของคุณ
  2. โคลนที่เก็บไปยังเครื่องโลคัลของคุณ ซอฟต์แวร์ Github ที่คุณติดตั้งในเครื่องของคุณสามารถทำสิ่งนี้ให้คุณได้ คลิกปุ่มโคลนข้างชื่อที่เก็บ
  3. ทำการเปลี่ยนแปลงโลคัล / คอมมิตกับไฟล์
  4. ซิงค์การเปลี่ยนแปลง
  5. ไปที่พื้นที่เก็บข้อมูลแยก GitHub ของคุณและคลิกปุ่มสีเขียว "เปรียบเทียบและตรวจสอบ" นอกเหนือจากปุ่มสาขา (ปุ่มมีไอคอน - ไม่มีข้อความ)
  6. หน้าใหม่จะเปิดขึ้นเพื่อแสดงการเปลี่ยนแปลงของคุณจากนั้นคลิกลิงก์คำขอดึงข้อมูลซึ่งจะส่งคำขอไปยังเจ้าของดั้งเดิมของที่เก็บที่คุณแยก

ฉันใช้เวลาสักครู่ในการคิดสิ่งนี้หวังว่าสิ่งนี้จะช่วยใครซักคน


3
ไม่มีความชัดเจนสำหรับฉันที่คุณต้องแยกธุรกรรมซื้อคืนก่อนที่จะสามารถส่งคำขอดึง ฉันคิดว่าการกระทำที่ผลักดันจะไปที่สาขาที่ค้างอยู่ซึ่งมีการเข้าถึงการเขียนสาธารณะและจากนั้นก็รวมเข้าด้วยกัน ขอบคุณ!
Chris Arena

16

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

เวิร์กโฟลว์นั้นง่ายเหมือน

  • แยก repo เป็น GitHub
  • รับ url url โดยคลิกที่ปุ่ม repo โคลน
  • ไปที่เทอร์มินัลแล้วรัน git clone <clone url you copied earlier>
  • ทำสาขาสำหรับการเปลี่ยนแปลงที่คุณทำ git checkout -b branch-name
  • ทำการเปลี่ยนแปลงที่จำเป็น
  • ยอมรับการเปลี่ยนแปลงของคุณ git commit
  • ผลักดันการเปลี่ยนแปลงของคุณไปสู่ทางแยกบน GitHub git push origin branch-name
  • ไปที่ส้อมของคุณบน GitHub เพื่อดูCompare and pull requestปุ่ม
  • คลิกที่มันและให้รายละเอียดที่จำเป็น

15

สำหรับพวกเราที่มีบัญชี github.com แต่จะได้รับข้อความแสดงข้อผิดพลาดที่น่ารังเกียจเมื่อเราพิมพ์ "git" ลงในบรรทัดคำสั่งนี่คือวิธีทำทั้งหมดในเบราว์เซอร์ของคุณ :)

  1. เช่นเดียวกับ Tim และ Farhan wrote: แยกสำเนาโครงการของคุณ: ขั้นตอนที่ 1: ทางแยก
  2. หลังจากผ่านไปสองสามวินาทีคุณจะถูกนำไปยังสำเนาโครงการของคุณเอง: ขั้นตอนที่ 2
  3. นำทางไปยังไฟล์ที่คุณต้องการเปลี่ยนแล้วคลิก "แก้ไขไฟล์นี้" ในแถบเครื่องมือ: ขั้นตอนที่ 3: แก้ไขไฟล์
  4. หลังจากแก้ไขแล้วให้เขียนคำสองสามคำที่อธิบายการเปลี่ยนแปลงจากนั้น "กระทำการเปลี่ยนแปลง" เช่นเดียวกับสาขาหลัก (เนื่องจากนี่เป็นเพียงสำเนาของคุณเองและไม่ใช่โครงการ "หลัก") ขั้นตอนที่ 4: ยืนยันการเปลี่ยนแปลง
  5. ทำซ้ำขั้นตอนที่ 3 และ 4 สำหรับไฟล์ทั้งหมดที่คุณต้องการแก้ไขจากนั้นกลับไปที่รูทของสำเนาของโครงการ คลิกปุ่ม "เปรียบเทียบความเห็น ... " สีเขียว: ขั้นตอนที่ 5: เริ่มส่ง
  6. สุดท้ายให้คลิก "สร้างคำขอการดึง" และจากนั้น "สร้างคำขอการดึง" อีกครั้งหลังจากคุณตรวจสอบหัวข้อและคำอธิบายคำขอของคุณ อีกครั้งป้อนคำอธิบายรูปภาพที่นี่

3

ฉันทำตามคำแนะนำของ Tim peterson แต่ฉันได้สร้างสาขาท้องถิ่นสำหรับการเปลี่ยนแปลงของฉัน อย่างไรก็ตามหลังจากผลักฉันไม่เห็นสาขาใหม่ใน GitHub ทางออกคือการเพิ่ม -u ไปที่คำสั่ง push:

git push -u origin <branch>

คุณสังเกตเห็นชื่อผู้ใช้ 2 ชื่อใน URL ด้านบนหรือไม่ ครั้งแรกคือtim-petersonที่ 2 คือDwolla
ทิมปีเตอร์สัน

3
นอกจากนี้ยังดีกว่าเป็นความเห็นต่อคำตอบของฉัน คุณอาจได้รับ downvotes บางส่วน
ทิมปีเตอร์สัน

1

ฉันเขียนโปรแกรมทุบตีที่ทำงานทั้งหมดของการตั้งค่าสาขาประชาสัมพันธ์สำหรับคุณ มันทำการฟอร์กหากจำเป็นซิงค์กับอัปสตรีมตั้งค่ารีสตรีมรีโมต ฯลฯ และคุณเพียงแค่ต้องยอมรับการดัดแปลงของคุณกดและส่ง PR

นี่คือวิธีที่คุณเรียกใช้:

github-make-pr-branch ssh your-github-username orig_repo_user orig_repo_name new-feature

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


0

ง่าย GitHub ดึงขอเป็นจากอินเตอร์เฟซเว็บโดยไม่ต้องใช้คอมไพล์

  1. ลงทะเบียนบัญชี GitHub จากนั้นลงชื่อเข้าใช้แล้วไปที่หน้าในที่เก็บที่คุณต้องการเปลี่ยน
  2. คลิกที่ไอคอนดินสอ

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

  3. หากคุณกำลังอ่านสิ่งนี้คุณจะไม่สามารถเข้าถึงที่เก็บข้อมูล (โฟลเดอร์โครงการ) ดังนั้น GitHub จะสร้างสำเนาของที่เก็บ (จริงๆแล้วเป็นสาขา) ในบัญชีของคุณ คลิกคำขอสร้างดึงปุ่ม

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