Temukan Permintaan Tarik di Github tempat komit awalnya dibuat


171

Pull Requests sangat bagus untuk memahami pemikiran yang lebih luas tentang suatu perubahan atau serangkaian perubahan yang dilakukan pada suatu repo. Membaca permintaan tarikan adalah cara yang bagus untuk cepat "grok" proyek karena, alih-alih perubahan atomik kecil ke sumbernya, Anda mendapatkan pengelompokan perubahan logis yang lebih besar. Analoginya dengan mengatur baris-baris dalam kode Anda menjadi "bait" terkait agar lebih mudah dibaca.

Saya menemukan diri saya melihat file atau komit, dan saya bertanya-tanya apakah ada cara untuk melacak kembali komit ke Permintaan Tarik yang awalnya dibuat itu. Permintaan Tarik itu pada akhirnya akan digabung, tetapi tidak perlu dengan komit gabungan.


1
+1 Ini juga berguna jika Anda melakukan proyek percabangan dan memiliki cabang kerja lama di sekitar dan Anda tidak lagi ingat jika Anda pernah membuat PR untuk itu.
Steve Clay

Jawaban:


226

Anda bisa pergi ke github dan memasukkan SHA ke bilah pencarian, pastikan Anda memilih tautan "Masalah" di sebelah kiri.

DIPERBARUI 13 Juli 2017

Melalui Github UI sekarang ada cara yang sangat mudah untuk melakukan ini. Jika Anda melihat komit dalam daftar komit di cabang di UI, klik tautan ke komit itu sendiri. Jika ada PR untuk komit itu dan tidak ditambahkan langsung ke cabang, tautan ke PR yang mencantumkan nomor PR dan cabang yang dimasukinya akan langsung di bawah pesan komit di bagian atas halaman. masukkan deskripsi gambar di sini


Contoh menemukan PR dengan mengklik tautan ke komit

Jika Anda memiliki SHA komit dan tidak ada yang lain dan tidak ingin menggali untuk itu, cukup tambahkan /commit/[commit SHA]ke url repo, dan Anda akan melihat halaman komit, dengan tautan PR jika ada. Misalnya, jika SHA adalah 52797a7a3b087231e4e391e11ea861569205aaf4 dan repo itu adalah https://github.com/glimmerjs/glimmerjvm , kemudian buka https://github.com/glimmer-vm/commit5277e7e7e7e


Saya tidak bisa membuat ini bekerja dengan SHA pendek seperti e4077951, apakah ini masih bekerja untuk Anda?
Matt Sanders

@RustyToms ini berfungsi, tetapi ketika saya mencari hash komit seperti yang Anda sebutkan, [ github.com/wso2/carbon-kernel/… itu memberi saya dua permintaan Tarik, keduanya telah menggabungkan komit yang sama ke master. Dalam skenario seperti itu, apa yang harus kita pilih sebagai permintaan Tarik yang menggabungkan komit terkait
Kasun Siyambalapitiya

@RustyToms bagaimana kita bisa mencapainya melalui API
Kasun Siyambalapitiya

1
@marathon ada cara yang lebih mudah untuk melakukannya sekarang, saya akan memperbarui jawabannya
RustyToms

1
Jika tidak ada referensi ke PR, dapatkah saya menyimpulkan tidak ada PR? Artinya, komit dibuat langsung di cabang (biasanya master)?
Erik

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

Jika perlu, ubah originnama remote yang menunjuk ke repositori github yang permintaan tariknya akan dikirim. Perintah pertama hanya perlu dijalankan sekali untuk remote yang diberikan, dan yang kedua umumnya akan dilakukan ketika mendapatkan pembaruan lainnya.

Ini akan menyebabkan git mendapatkan informasi tentang permintaan tarik bersama dengan cabang aktual. Mereka akan muncul sebagai cabang pelacakan jarak jauh seperti origin/pull/123. Setelah selesai Anda dapat menggunakan git describedengan --alldan --contains pilihan untuk menunjukkan cabang pertama yang memiliki direferensikan komit.

Namun, ini tidak akan berfungsi jika komit yang Anda cari sebenarnya adalah versi komit yang dimodifikasi dari permintaan tarik seperti jika perubahan diubah ke pekerjaan lain atau orang yang melakukan penggabungan memutuskan untuk membuat beberapa perubahan.


Saya menganggap ini hasil dalam mengunduh semua komit di PR yang ditolak. Apakah tidak ada cara untuk mengambil daftar pull/*/headkomit tanpa gumpalan? Bagaimana seseorang "membersihkan" setelah ini (mengkonfigurasi ulang asal-usulnya)?
Steve Clay

1
Ini bagus untuk diketahui; Saya tidak tahu GitHub melacak ini sebagai objek Git yang sebenarnya tetapi itu masuk akal. BTW maksud Anda menggunakan "upstream" alih-alih "asal" pada perintah config Anda?
Tobias J

1
@TobyJ Penggunaan upstreammemang kesalahan. Saya telah menyalinnya dari repositori yang memiliki konfigurasi tempat remote dinamai upstreamdan melewatkan kejadian itu ketika mengubahnya untuk menggunakan yang lebih umum originsebagai nama remote. Saya sudah mengedit jawaban untuk memperbaikinya.
qqx

Terima kasih! Tapi ini sangat rumit. Saya berharap ada tautan ke permintaan tarik yang berisi di UI web.
Daniel Darabos

fwiw Anda juga dapat mencoba menggunakan refs/remotes/origin/pr/*bukannyarefs/remotes/origin/pull/*
elaichi

21

Sejak 13 Oktober 2014, ini harus langsung:

Sebagai contoh:

Anda dapat melihat file tersebut hakimel/reveal.js/plugin/markdown/markdown.js, kontribusi saya sekarang hadir dengan referensi ke PR # 734 asalnya.

PR dari contrib

Ini berasal dari Menghubungkan permintaan tarik gabungan dari komit :

Kami telah menyertakan cabang dan tag yang berisi pada halaman komit untuk memberi Anda lebih banyak konteks seputar perubahan. Sekarang, komit di cabang default repositori juga akan menunjukkan kepada Anda permintaan tarik yang memperkenalkannya.

komit dengan referensi PR di dalamnya!

Dalam permintaan tarik, Anda dapat melihat diskusi seputar mengapa komit diperkenalkan, dan dapatkan gambaran yang lebih jelas tentang alasan perubahan tersebut.

Seperti biasa, jika Anda mengetahui SHA komit, Anda dapat melewati halaman komit dan mencari permintaan tarikan secara langsung .


ketika saya mencari hash komit seperti yang Anda sebutkan, [ github.com/wso2/carbon-kernel/… itu memberi saya dua permintaan Tarik, keduanya telah menggabungkan komit yang sama ke master. Dalam skenario seperti itu, apa yang harus kita pilih sebagai permintaan Tarik yang menggabungkan komit terkait
Kasun Siyambalapitiya

@KasunSiyambalapitiya Tidak yakin: Anda bisa mengajukan pertanyaan baru untuk itu. Saya akan pergi dengan yang terbaru.
VonC

2
bisakah kita mendapatkan ini di APIlevel?
Kasun Siyambalapitiya

@KasunSiyambalapitiya Pertanyaan bagus. Saya tidak tahu Saya tidak melihat referensi itu di developer.github.com/v3/repos/commits/#get-a-single-commit
VonC

@ Esp Menarik. Saya melihat daftar PR, tetapi bukan SHA1 mereka yang menandai integrasi mereka.
VonC


3

Saya memiliki masalah yang sama dan menulis pembantu bash pr_for_sha, didokumentasikan di sini:

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

Sebut saja pr_for_sha <COMMIT>dan akan membuka halaman permintaan tarik github yang sesuai di browser.


2
Solusi ini mengasumsikan bahwa gabungan terdekat setelah komit adalah gabungan yang berisi komit, yang tidak selalu selalu demikian.
Jason Denney

@JasonDenney Dengan mengikuti maksud Anda di cabang yang diberikan atau tepat waktu?
LeZuse

Hmm, ini beberapa waktu yang lalu, tapi kurasa maksudku tepat waktu. Katakanlah pada hari Senin Anda membuat komit "X" di cabang A, Selasa Anda membuat komit di cabang B dan menggabungkan cabang B ke master, Rabu Anda menggabungkan cabang A ke master. Jika Anda menggunakan skrip ini untuk melakukan pencarian saat berada di cabang master tempat PR melakukan "X" berada, saya cukup yakin itu salah memberi tahu Anda cabang B. Namun, periksa sendiri.
Jason Denney

Tidak dapat menjalankan git logperintah. 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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.