ค้นหาคำขอดึงบน Github ที่ความมุ่งมั่นถูกสร้างขึ้นในตอนแรก


171

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

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


1
+1 สิ่งนี้ยังมีประโยชน์หากคุณแยกโครงการและมีสาขางานเก่านั่งอยู่รอบ ๆ และคุณจำไม่ได้อีกต่อไปหากคุณเคยทำ PR สำหรับมัน
Steve Clay

คำตอบ:


225

คุณสามารถไปที่ GitHub และใส่ SHA ลงในแถบค้นหาตรวจสอบให้แน่ใจว่าคุณได้เลือกลิงก์ "ปัญหา" ทางด้านซ้าย

อัปเดต 13 กรกฎาคม 2560

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


ตัวอย่างการค้นหา PR โดยคลิกที่ลิงค์เพื่อส่งข้อมูล

หากคุณมีความมุ่งมั่นของ SHA และไม่มีอะไรอื่นและไม่ต้องการขุดหามันให้เพิ่ม/commit/[commit SHA]ไปที่ repo url แล้วคุณจะเห็นหน้ากระทำด้วยลิงก์ PR หากมีอยู่ ตัวอย่างเช่นหาก SHA คือ 52797a7a3b087231e4e391e11ea861569205aaf4 และ repo คือhttps://github.com/glimmerjs/glimmer-vmจากนั้นไปที่https://github.com/glimmerjv/commit/5/9711787199787319943169731997313199499697313199499731997319973131994 ของพวกเขา


ฉันไม่สามารถใช้มันกับ SHA แบบสั้น ๆe4077951ได้มันยังใช้ได้กับคุณหรือไม่?
Matt Sanders

@RustyToms งานนี้ แต่เมื่อฉันค้นหาแฮชคอมมิชตามที่คุณพูดถึง [ github.com/wso2/carbon-kernel/ ......มันให้ฉันสองครั้งที่ดึงคำขอทั้งสองได้รวมการกระทำเดียวกันกับนาย ในสถานการณ์เช่นนี้สิ่งที่เราควรเลือกเป็นคำขอดึงที่ผสานการกระทำที่เกี่ยวข้อง
Kasun Siyambalapitiya

@RustyToms เราจะทำให้สำเร็จได้อย่างไรผ่าน API
Kasun Siyambalapitiya

1
@marathon มีวิธีที่ง่ายยิ่งกว่าที่จะทำตอนนี้ฉันจะอัปเดตคำตอบ
RustyToms

1
หากไม่มีการอ้างอิงถึง PR ฉันสามารถสรุปได้ว่าไม่มีการประชาสัมพันธ์? นั่นคือการกระทำได้ทำโดยตรงกับสาขา (ปกติmaster)?
Erik

53
git config --add remote.origin.fetch +refs/pull/*/head:refs/remotes/origin/pull/*
git fetch origin
git describe --all  --contains <COMMIT>

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

สิ่งนี้จะทำให้ git ได้รับข้อมูลเกี่ยวกับคำขอดึงพร้อมกับสาขาจริง origin/pull/123พวกเขาจะแสดงขึ้นเป็นระยะไกลติดตามสาขาเช่น เมื่อเสร็จแล้วคุณสามารถใช้git describeกับ--allและ--contains ตัวเลือกเพื่อแสดงสาขาแรกที่มีการกระทำที่อ้างอิง

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


ฉันถือว่าผลลัพธ์นี้ในการดาวน์โหลดทั้งหมดกระทำใน PRs ที่ถูกปฏิเสธ มีวิธีที่จะได้รับรายชื่อของการpull/*/headกระทำโดยไม่ต้อง blobs หรือไม่? หนึ่งจะ "ล้าง" หลังจากนี้ (กำหนดค่าต้นกำเนิด) ได้อย่างไร
Steve Clay

1
นี่เป็นเรื่องดีที่จะรู้ ฉันไม่รู้ว่า GitHub ติดตามสิ่งเหล่านี้เป็นวัตถุ Git จริง แต่มันสมเหตุสมผลดี BTW คุณหมายถึงการใช้ "upstream" แทน "origin" ในคำสั่ง config ของคุณหรือไม่
โทเบียส J

1
@TobyJ การใช้งานupstreamนั้นเป็นความผิดพลาดแน่นอน ฉันได้คัดลอกมาจากที่เก็บที่มีการตั้งค่าที่รีโมตถูกตั้งชื่อupstreamและพลาดเหตุการณ์นั้นเมื่อเปลี่ยนไปใช้สามัญมากกว่าoriginเป็นชื่อของรีโมต ฉันได้แก้ไขคำตอบเพื่อแก้ไขปัญหานั้น
qqx

ขอบคุณ! แต่มันซับซ้อนมาก ฉันหวังว่าจะมีลิงก์ไปยังคำขอดึงที่มีอยู่บนเว็บ UI
Daniel Darabos

fwiw คุณสามารถลองใช้refs/remotes/origin/pr/*แทนrefs/remotes/origin/pull/*
elaichi

21

ตั้งแต่วันที่ 13 ตุลาคม 2014 สิ่งนี้ควรตรงไปตรงมา:

ตัวอย่างเช่น:

คุณสามารถดูไฟล์hakimel/reveal.js/plugin/markdown/markdown.js, ผลงานของฉันตอนนี้มาพร้อมกับการอ้างอิงถึงPR # 734มันมา

ประชาสัมพันธ์จาก contrib

สิ่งนี้มาจากการลิงก์คำขอดึงที่ผสานจากการกระทำ :

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

กระทำกับการอ้างอิง PR อยู่ในนั้น!

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

และเช่นเคยถ้าคุณรู้ว่ากระทำ SHA คุณสามารถข้ามหน้ากระทำและค้นหาคำขอดึงโดยตรง


เมื่อฉันค้นหาแฮชคอมมิทตามที่คุณพูดถึง [ github.com/wso2/carbon-kernel/ …มันให้คำขอดึงสองครั้งกับฉันทั้งสองได้รวมการคอมมิตเดียวกันกับนาย ในสถานการณ์เช่นนี้สิ่งที่เราควรเลือกเป็นคำขอดึงที่ผสานความมุ่งมั่นที่เกี่ยวข้อง
Kasun Siyambalapitiya

@ KasunSiyambalapitiya ไม่แน่ใจ: คุณสามารถถามคำถามใหม่ได้ ฉันจะไปกับล่าสุด
VonC

2
เราจะได้สิ่งนี้ในAPIระดับหรือไม่?
Kasun Siyambalapitiya

@KasunSiyambalapitiya เป็นคำถามที่ดี ฉันไม่รู้ ฉันไม่เห็นข้อมูลอ้างอิงดังกล่าวในdeveloper.github.com/v3/repos/commits/#get-a-single-commit
VonC

@esp ที่น่าสนใจ ฉันเห็นรายการ PR แต่ไม่ใช่ SHA1 ที่ทำเครื่องหมายการรวมเข้าด้วยกัน
VonC


3

ฉันมีปัญหาเดียวกันนี้และเขียน pr_for_sha bash helper ซึ่งบันทึกไว้ที่นี่:

http://joey.aghion.com/find-the-github-pull-request-for-a-commit/

เรียกว่าชอบpr_for_sha <COMMIT>และมันจะเปิดหน้าคำขอดึง GitHub ที่สอดคล้องกันในเบราว์เซอร์


2
วิธีแก้ปัญหานี้อนุมานว่าการผสานที่ใกล้ที่สุดหลังจากการคอมมิทคือการรวมที่มีการคอมมิชชันซึ่งไม่จำเป็นต้องเป็นทุกกรณี
Jason Denney

@JasonDenney การติดตามคุณหมายถึงในสาขาหรือเวลาที่กำหนด?
LeZuse

อืมมันเพิ่งผ่านไปซักพักแล้ว แต่ฉันคิดว่าฉันตั้งใจ พูดเมื่อวันจันทร์ที่คุณทำการส่งมอบ "X" ในสาขา A, วันอังคารที่คุณทำการคอมมิชชันในสาขา B และผสานสาขา B ไปยังต้นแบบ, วันพุธคุณผสานสาขา A ไปยังต้นแบบ หากคุณใช้สคริปต์นี้เพื่อทำการค้นหาในสาขาหลักที่ PR commit "X" อยู่ฉันก็ค่อนข้างแน่ใจว่ามันจะบอกสาขา B อย่างไม่ถูกต้อง
Jason Denney

ไม่สามารถgit logรับคำสั่งให้ทำงานได้ git log --merges --ancestry-path --oneline 66100ab0..master- fatal: ambiguous argument '66100ab0..master': unknown revision or path not in the working tree.-git version 2.25.0
Gianfranco P.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.