คุณจะแนบคำขอดึงใหม่กับปัญหาที่มีอยู่ใน GitHub ได้อย่างไร


409

ฉันไม่แน่ใจ แต่ฉันมีความจำที่คลุมเครือในการสร้างคำขอดึง github กับ "Issue 4" หรือบางอย่างในชื่อและมันจะแนบตัวเองกับ Issue 4 ในโครงการที่ฉันส่งไปโดยอัตโนมัติ ฉันลองอีกครั้งเมื่อเร็ว ๆ นี้และใช้งานไม่ได้ - เพิ่งสร้างปัญหาใหม่เอี่ยมแทน ฉันไม่เห็นตัวเลือกใด ๆ เช่น "แนบกับปัญหา" ในหน้าคำขอดึงใหม่หรือ "เปิดคำขอดึงใหม่สำหรับปัญหานี้" ในหน้าปัญหา มีวิธีการทำเช่นนี้หรือไม่เพื่อช่วยให้เจ้าของโครงการรักษาหน้าปัญหาของตนให้สะอาดและหลีกเลี่ยงการทำซ้ำ

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


1
ฉันเชื่อว่าคำตอบของฉันแสดงถึงความจริงที่ว่าคุณลักษณะที่คุณต้องการ ("แนบคำขอดึงไปยังปัญหาที่มีอยู่ ") อาจยังไม่มี
VonC

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

ฉันหวังว่าฟีเจอร์จะสูงในรายการลำดับความสำคัญ gitHub เพราะรหัสจะออกมาน่ารัก!
flq

2
คำตอบที่ถูกต้องควรเปลี่ยนเป็นของ masukomi ตอนนี้มีวิธี "แก้ไข # 1" ที่ใช้ได้ ไม่จำเป็นต้องผ่าน API
Edward Anderson

ฉันยังไม่สามารถหาวิธีที่จะแนบคำขอดึงกับปัญหาที่มีอยู่ ฉันพลาดอะไรไปหรือเปล่า คำตอบในกระทู้นี้ดูเหมือนว่าจะแนะนำความสามารถนี้อยู่ แต่ฉันไม่พบมัน (มันมักจะทำให้ปัญหาใหม่)
Kevin Jalbert

คำตอบ:


245

โครงการ "ฮับ" สามารถทำได้:

https://github.com/defunkt/hub

ในที่เก็บและสาขาที่คุณต้องการส่งคำขอดึงจาก:

$ hub pull-request -i 4

สิ่งนี้ใช้ GitHub API และแนบคำขอดึงสำหรับสาขาปัจจุบันกับหมายเลขปัญหาที่มีอยู่ 4


แก้ไข:ความคิดเห็นโดย @atomicules: หากต้องการขยายคำตอบโดย @MichaelMior ตัวอย่างแบบเต็มคือ:

$ hub pull-request -i 4 -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE

12
brew install hubการติดตั้งกับ homebrew
gcamp

11
มันไม่ได้ผลสำหรับฉัน กล่าวว่าเกิดข้อผิดพลาดในการสร้างคำขอดึง: เอนทิตีที่ไม่สามารถประมวลผลได้ (HTTP 422)
Rubycut

11
@ Rubycut ฉันมีปัญหาเดียวกัน แทนที่จะทำhub pull-request URL_TO_ISSUEอย่างนั้นมันก็ใช้ได้ผลสำหรับฉันแล้ว ฉันสงสัยว่า-i ISSUE_NUMBERจะทำงานเฉพาะในกรณีที่ปัญหาอยู่ในพื้นที่เก็บข้อมูลเดียวกัน (เช่นไม่ใช่ทางแยก)
Michael Mior

30
หากต้องการขยายคำตอบโดยhub pull-request -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE
@MichaelMior

4
โปรดทราบว่าวิธีนี้ใช้ได้กับปัญหาที่คุณสร้างเท่านั้น: github.com/defunkt/hub/issues/189#issuecomment-6353354
Zach

237

เพิ่มคำขอดึงให้เป็นปัญหาต้นน้ำที่มีอยู่เป็นเรื่องง่ายสมมติว่าคุณคดเคี้ยวใช้ GitHub วิธีการปกติ

เพียงอ้างอิงปัญหาในข้อความยืนยันของคุณโดยใช้คำหลักที่รองรับ :

  • ปิด
  • ปิด
  • ปิด
  • แก้ไข
  • แก้ไข
  • แก้ไขแล้ว
  • แก้ไข
  • แก้ไข
  • การแก้ไข

ตัวอย่างเช่น: "การกระทำนี้แก้ไข # 116"

ข้อความที่อ้างอิงถึงปัญหาไม่จำเป็นต้องปรากฏในบรรทัดหัวเรื่องของการส่งข้อความของคุณ

ผลักดันการกระทำของคุณไปยัง repo GitHub และคำขอดึงจะถูกผนวกเข้ากับปัญหาโดยอัตโนมัติ

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


31
"ขอแนะนำอย่างยิ่งให้คุณยอมรับสิ่งใดก็ตามที่จะเป็นส่วนหนึ่งของคำขอดึงไปยังสาขาแยกที่เฉพาะเจาะจงสำหรับปัญหานั้นเพราะในอนาคตความมุ่งมั่นในสาขานั้นจะถูกผนวกเข้ากับคำขอดึง" - จุดดีมาก เกิดขึ้นกับฉันครั้งเดียวและมันค่อนข้างน่าแปลกใจ
MatrixFrog

9
นี่ไม่ได้แก้ปัญหาของการเปลี่ยนปัญหาให้เป็นการร้องขอการดึงที่น่าเสียดาย การสนทนาใด ๆ ที่เกิดขึ้นในปัญหาไม่ได้รับการถ่ายโอนไปยังคำขอการดึง ... ซึ่งโชคร้ายสำหรับกรณีใช้งานหลายกรณี ฉันหวังว่า Github จะให้การควบคุมแบบละเอียดในการทำงานของ pull-reqs ในการตั้งค่า repo
Alex Waters

1
@masukomi คำขอการดึงนั้นง่ายขึ้นสำหรับผู้ดูแลโครงการที่จะแก้ไข - พวกเขาสามารถยอมรับและรวมการเปลี่ยนแปลงด้วยการคลิกปุ่ม เมื่อต้องการดึงการเปลี่ยนแปลงในทางแยกโดยไม่ใช้คำขอดึงคุณจะต้องเพิ่มทางแยกเป็นทางไกลดึงการเปลี่ยนแปลงและรวมเข้าด้วยกัน
Rory O'Kane

2
ฉันคิดว่าคุณพลาดจุดของฉันโรรี่ หากคุณสร้างคำขอดึงและพูดถึงในปัญหา (ตามที่ฉันแนะนำ) แสดงว่ามีการเชื่อมต่อทั้งสองและคุณยังสามารถคลิกปุ่มเพื่อรับการเปลี่ยนแปลง
masukomi

2
สิ่งนี้ไม่ได้ช่วยเมื่อคำขอการดึงเป็นสิ่งที่กำลังดำเนินอยู่ เวิร์กโฟลว์ของเราคือการสร้างปัญหาสำหรับแนวคิดแล้วดึงคำขอจากสาขาฟีเจอร์เมื่อเราเริ่มทำงานกับแนวคิดเหล่านั้น การปิดปัญหาโดยใช้การส่งคำขอหมายถึงเราสูญเสียการสนทนาก่อนหน้านี้ว่าปัญหาที่มีอยู่ซึ่งมักจะรวมถึงการแก้ไขฟีเจอร์ / แก้ไข / refactor ที่อยู่ปัญหา สิ่งที่จำเป็นจริงๆคือวิธีแก้ไขปัญหาในคำขอดึงทันทีเมื่อทำงานกับปัญหาได้เริ่มขึ้น
Daniel Bingham

144

คุณสามารถสร้างคำขอการดึงจากปัญหาที่มีอยู่ด้วยAPI คำขอการดึง :

$ curl --user "smparkes" \
       --request POST \
       --data '{"issue": 15, "head": "smparkes:synchrony", "base": "master"}' \
       https://api.github.com/repos/technoweenie/faraday/pulls

สิ่งนี้สร้างคำขอดึง:

  • ขอให้technoweenieโครงการfaraday(https://api.github.com/repos/ technoweenie / เดย์ / ดึง)
  • เพื่อดึงจากsynchronyสาขาในsmparkes'fork ("head": " smparkes : synchrony ")
  • ไปยังmasterสาขาในtechnoweenie's fork ("base": " master ")
  • และแนบคำขอดึงเพื่อออก 15 ("ปัญหา": 15 )
  • กับผู้เขียนคำขอดึงsmparkes(- ผู้ใช้" smparkes ")
  • คุณจะได้รับแจ้งให้ใส่รหัสผ่าน GitHub ของคุณ

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

3
นอกจากนี้คุณยังต้องมีการตรวจสอบสิทธิ์เพิ่มสิ่งนี้ลงในคำสั่งด้านบน: -u "เข้าสู่ระบบ: รหัสผ่าน"
morgoth

2
ฉันแค่อยากจะเพิ่มว่าวิธีนี้ยังใช้งานได้ แต่มันอาจมีผลข้างเคียงของการแสดงความมุ่งมั่นของคุณสองครั้งในหน้าอภิปรายหาก GitHub ได้หยิบมันขึ้นมาโดยปริยายจากปัญหา # ในข้อความ ( ตัวอย่าง ) ความมุ่งมั่นมาเพียงครั้งเดียวเมื่อคำขอดึงอย่างเป็นทางการแม้ว่า
Greg Haskins

3
สามารถอัปเดตเป็น v3 API ได้หรือไม่ GitHub เพิ่งปิด API v2
Michael Best

1
@rsanchezsaez ขณะที่ผมกล่าวว่าในคำตอบของฉันเปลี่ยนแปลง--user "smparkes:password"เพื่อ--user "smparkes"ให้มีการถามรหัสผ่านของคุณโต้ตอบ
Rory O'Kane

17

เครื่องมือที่เป็นไปได้อีกอย่างคือเว็บไซต์ Issue2Prซึ่งเปลี่ยนปัญหาของคุณให้เป็นคำขอดึงข้อมูล

มันง่ายมากและมีประสิทธิภาพ!

ป้อนคำอธิบายรูปภาพที่นี่

แหล่งข้อมูล:


10

นี้คำตอบอื่น ๆอธิบายวิธีการใช้ม้วน ( curl) เพื่อสร้างการร้องขอดึงจากฉบับผ่านGitHub API นี่คือวิธีการใช้HTTPie ( http) ซึ่งสร้างคำสั่งที่ง่ายต่อการอ่านและง่ายต่อการแก้ไข:

$ http --auth "<your-GitHub-username>" \
       POST \
       https://api.github.com/repos/<issue-repo-owner>/<issue-repo-name>/pulls \
       issue=<issue-number> head=<your-GitHub-username>:<your-fork-branch-name> base=<issue-repo-branch-name>

จากนั้นพิมพ์รหัสผ่าน GitHub ของคุณเมื่อได้รับแจ้ง

ตัวอย่างที่อธิบาย

คุณได้เข้าสู่ระบบด้วยชื่อผู้ใช้ GitHub smparkesและรหัสผ่านhunter2 คุณเห็นtechnoweenie ‘s repo เดย์ , คิดว่าสิ่งที่ควรจะมีการเปลี่ยนแปลงและทำให้เกิดปัญหาใน repo ว่ามันฉบับที่ 15 ต่อมาคุณพบว่าไม่มีใครทำการเปลี่ยนแปลงที่เสนอของคุณและคุณมีเวลาทำด้วยตัวเอง คุณแยกเดย์ไปยังบัญชีของคุณเองแล้วเขียนการเปลี่ยนแปลงและผลักดันให้ส้อมของคุณภายใต้ชื่อสาขาเรียบลื่น คุณคิดว่าเทคโนโลนีควรดึงการเปลี่ยนแปลงเหล่านั้นไปยังนายสาขาของ repo ของเขา นี่คือคำสั่งที่คุณจะเขียนเพื่อแปลงฉบับก่อนหน้าของคุณเป็นคำขอดึงสำหรับสถานการณ์นี้:

$ http --auth "smparkes" \
       POST \
       https://api.github.com/repos/technoweenie/faraday/pulls \
       issue=15 head=smparkes:synchrony base=master
http: password for smparkes@api.github.com: hunter2

ตอนนี้ปัญหา # 15เป็นคำขอดึง


3

ในกรณีที่คุณใช้ 2-factor-auth กับ github คุณจะต้องให้ authtoken เป็นส่วนหัวในคำขอ:

curl -u "<your_username>:<your_pw>" \
     --header 'X-GitHub-OTP: <your_authtoken>' \
     --request POST \
     --data '{"issue":"<issue_nr>", "head":"<your_username>:<your_forks_branchname>", "base":"<upstream_branch>"}' \
     https://api.github.com/repos/<upstream_user>/<upstream_repo>/pulls

1
ใช่ 2FA ป้องกันคำตอบมากมายที่นี่จากการทำงาน ในกรณีของฉันฉันสร้างโทเค็นการเข้าถึงส่วนบุคคลและใช้งานแทนรหัสผ่านซึ่งใช้งานได้
berto

1

คุณสามารถใช้Gubเพื่อส่งคำขอดึงสำหรับปัญหาของคุณ

นอกจากนี้ยังช่วยให้คุณใช้สไตล์ส้อม / ดึงคำขอที่เหมาะสม

แก้ไข: 10/5/2013

ในการรับ Gub เพื่อส่งคำขอดึงปัญหา # 123 คุณต้องดำเนินการดังต่อไปนี้:

$ gub start 123

นี่จะเป็นการสร้างสาขาใหม่ -123 เมื่อคุณแก้ไขปัญหาเสร็จแล้วให้ดำเนินการ:

$ gub finish

Voila!

หมายเหตุ: ฉันเป็นผู้แต่งอัญมณี Gub


1

แทนที่จะทำสิ่งนั้นในฝั่งไคลเอ็นต์ (ด้วยhubเช่นเดียวกับในคำตอบของคริสเตียน Oudard ) ตอนนี้คุณ (กุมภาพันธ์ 2020) สามารถทำได้บนฝั่งเซิร์ฟเวอร์ (github.com)

ดู " ดูและเชื่อมโยงปัญหาและดึงคำขอจากแถบด้านข้าง "

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

เอกสาร :https://help.github.com/assets/images/help/pull_requests/link-issue-drop-down.png

และมีAPI การค้นหาพร้อมฟีเจอร์นั้น

ค้นหาปัญหาที่เปิดอยู่ทั้งหมดในที่เก็บที่มีคำขอปิดการอ้างอิงแบบดึงพร้อมกับตัวระบุการlinked:prค้นหา ในทำนองเดียวกันการค้นหาทุกคำขอดึงในพื้นที่เก็บข้อมูลที่ขาดหายไปเป็นปัญหากับการสนับสนุน
-linked:issue


0

การใช้เครื่องมือgit-hubคุณสามารถทำได้ด้วย:

$> git hub pull attach 123

สิ่งนี้จะแปลงปัญหา # 123 เป็นคำขอการดึง # 123 ดังนั้นจึงคงการอภิปรายทั้งหมดเกี่ยวกับปัญหาในที่เดียว


0

หากคุณเปิดใช้งาน 2FA คุณสามารถใช้ส่งผ่านโทเค็นด้วย HTTPie:

http POST \
    https://api.github.com/repos/<repo-owner>/<repo-name>/pulls \
    issue=2 head=issue_2 base=master
    "Authorization:token PUTAUTHTOKENHERE"

วิธีนี้จะใช้สาขาissue_2เพื่อแปลงปัญหา # 2 เป็นคำขอดึง

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