Tìm Yêu cầu Kéo trên Github nơi cam kết ban đầu được tạo


171

Yêu cầu kéo rất tốt để hiểu được suy nghĩ lớn hơn xung quanh một thay đổi hoặc tập hợp các thay đổi được thực hiện cho một repo. Đọc các yêu cầu kéo là một cách tuyệt vời để nhanh chóng "mò mẫm" một dự án, thay vì các thay đổi nguyên tử nhỏ đối với nguồn, bạn có được các nhóm thay đổi logic lớn hơn. Tương tự như việc sắp xếp các dòng trong mã của bạn thành các "khổ thơ" có liên quan để dễ đọc hơn.

Tôi thấy mình đang xem một tập tin hoặc một cam kết và tôi tự hỏi liệu có cách nào để quay lại cam kết với Yêu cầu kéo ban đầu đã tạo ra nó không. Yêu cầu kéo đó cuối cùng đã được hợp nhất, nhưng không cần thiết với một cam kết hợp nhất.


1
+1 Điều này cũng hữu ích nếu bạn rẽ nhánh một dự án và có một nhánh công việc cũ ngồi xung quanh và bạn không còn nhớ nếu bạn đã từng làm PR cho nó.
Steve Clay

Câu trả lời:


225

Bạn chỉ có thể truy cập github và nhập SHA vào thanh tìm kiếm, đảm bảo bạn chọn liên kết "Sự cố" ở bên trái.

CẬP NHẬT ngày 13 tháng 7 năm 2017

Thông qua giao diện người dùng Github giờ đây có một cách thực sự dễ dàng để làm điều này. Nếu bạn đang xem một cam kết trong danh sách các cam kết trong một nhánh trong giao diện người dùng, hãy nhấp vào liên kết đến chính cam kết đó. Nếu có PR cho cam kết đó và nó không được thêm trực tiếp vào chi nhánh, liên kết đến PR liệt kê số PR và chi nhánh mà nó đi vào sẽ nằm ngay dưới thông điệp cam kết ở đầu trang. nhập mô tả hình ảnh ở đây


Ví dụ về việc tìm PR bằng cách nhấp vào liên kết đến cam kết

Nếu bạn có SHA cam kết và không có gì khác và không muốn tìm hiểu về nó, chỉ cần thêm /commit/[commit SHA]vào url repo và bạn sẽ thấy trang cam kết, với liên kết PR nếu nó tồn tại. Ví dụ: nếu SHA là 52797a7a3b087231e4e391e11ea861569205aaf4 và repo là https://github.com/glimmerjs/glimmer-vm , sau đó, hãy truy cập vào https: //github


Tôi không thể làm điều này để làm việc với một SHA ngắn như thế e4077951, điều này có còn hiệu quả với bạn không?
Matt Sanders

@RustyToms điều này hoạt động, nhưng khi tôi tìm kiếm một hàm băm cam kết như bạn đã đề cập, [ github.com/wso2/carbon-kernel/, nó cung cấp cho tôi hai yêu cầu Kéo cả hai đã hợp nhất cùng một cam kết với chủ. Trong loại kịch bản như vậy, chúng ta nên chọn yêu cầu Kéo kết hợp với cam kết có liên quan
Kasun Siyambalapitiya

@RustyToms làm thế nào chúng ta có thể đạt được điều này thông qua API
Kasun Siyambalapitiya

1
@marathon có một cách thậm chí còn dễ dàng hơn để làm điều đó ngay bây giờ, tôi sẽ cập nhật câu trả lời
RustyToms

1
Nếu không có tài liệu tham khảo về PR, tôi có thể kết luận là không có PR không? Đó là, cam kết được thực hiện trực tiếp trên chi nhánh (thường master)?
Erik

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

Nếu cần, hãy đổi originthành tên của điều khiển từ xa trỏ đến kho lưu trữ github mà yêu cầu kéo sẽ được gửi. Lệnh đầu tiên chỉ cần được chạy một lần cho bất kỳ điều khiển từ xa nào và lệnh thứ hai thường sẽ được thực hiện khi nhận các bản cập nhật khác.

Điều này sẽ khiến git có được thông tin về các yêu cầu kéo cùng với các nhánh thực tế. Chúng sẽ hiển thị dưới dạng các nhánh theo dõi từ xa như origin/pull/123. Khi đã xong, bạn có thể sử dụng git describevới --all--contains các tùy chọn để hiển thị nhánh đầu tiên có cam kết được tham chiếu.

Tuy nhiên, điều này sẽ không hoạt động nếu cam kết mà bạn đang tìm kiếm thực sự là phiên bản sửa đổi của cam kết từ yêu cầu kéo, chẳng hạn như nếu các thay đổi được chuyển sang công việc khác hoặc người thực hiện hợp nhất đã quyết định thực hiện một số thay đổi.


Tôi giả sử kết quả này trong việc tải xuống tất cả các cam kết trong các PR bị từ chối. Không có cách nào để có được danh sách các pull/*/headcam kết mà không có các đốm màu? Làm thế nào một người sẽ "dọn dẹp" sau này (cấu hình lại nguồn gốc)?
Steve Clay

1
Thật tuyệt khi biết điều này; Tôi không biết GitHub đã theo dõi chúng như những đối tượng Git thực tế nhưng nó có ý nghĩa hoàn hảo. BTW có nghĩa là bạn sử dụng "ngược dòng" thay vì "origin" trên lệnh config của bạn?
Tobias J

1
@TobyJ Việc sử dụng upstreamthực sự là một sai lầm. Tôi đã sao chép nó từ một kho lưu trữ có cấu hình đó, nơi điều khiển từ xa được đặt tên upstreamvà bỏ lỡ sự xuất hiện đó khi thay đổi nó để sử dụng phổ biến hơn originnhư tên của điều khiển từ xa. Tôi đã chỉnh sửa câu trả lời để khắc phục điều đó.
qqx

Cảm ơn! Nhưng điều này quá phức tạp. Tôi muốn có một liên kết đến yêu cầu kéo chứa trên giao diện người dùng web.
Daniel Darabos

fwiw bạn cũng có thể thử sử dụng refs/remotes/origin/pr/*thay vìrefs/remotes/origin/pull/*
elaichi

21

Kể từ ngày 13 tháng 10 năm 2014, điều này sẽ đơn giản:

Ví dụ:

Bạn có thể thấy cho tập tin hakimel/reveal.js/plugin/markdown/markdown.js, đóng góp của tôi bây giờ đi kèm với một tham chiếu đến PR # 734 mà nó bắt nguồn.

PR từ đóng góp

Điều này xuất phát từ Liên kết các yêu cầu kéo được hợp nhất từ ​​các xác nhận :

Chúng tôi đã bao gồm các nhánh và thẻ chứa trên các trang cam kết để cung cấp cho bạn nhiều bối cảnh hơn xung quanh các thay đổi. Bây giờ, các cam kết trong nhánh mặc định của kho lưu trữ cũng sẽ hiển thị cho bạn yêu cầu kéo đã giới thiệu chúng.

cam kết với tài liệu tham khảo PR trong đó!

Trong yêu cầu kéo, bạn có thể thấy các cuộc thảo luận xung quanh lý do tại sao cam kết được đưa ra và có được một bức tranh rõ ràng hơn về lý do cho sự thay đổi.

Như mọi khi, nếu bạn biết SHA cam kết, bạn có thể bỏ qua trang cam kết và tìm kiếm yêu cầu kéo trực tiếp .


Khi tôi tìm kiếm một hàm băm cam kết như bạn đã đề cập, [ github.com/wso2/carbon-kernel/NH, nó cung cấp cho tôi hai yêu cầu Kéo cả hai đã hợp nhất cùng một cam kết với chủ. Trong loại kịch bản như vậy, chúng ta nên chọn yêu cầu Kéo kết hợp với cam kết có liên quan
Kasun Siyambalapitiya

@KasunSiyambalapitiya Không chắc chắn: bạn có thể hỏi một câu hỏi mới cho điều đó. Tôi sẽ đi với gần đây nhất.
VonC

2
chúng ta có thể đạt được điều này ở APIcấp độ?
Kasun Siyambalapitiya

@KasunSiyambalapitiya Câu hỏi hay. Tôi không biết. Tôi không thấy tài liệu tham khảo đó trong developer.github.com/v3/repose/commits/#get-a-single-commit
VonC

@esp Thú vị. Tôi thấy một danh sách PR, nhưng không phải cam kết SHA1 của họ đánh dấu sự tích hợp của họ.
VonC

10

Đặt hàm băm cam kết vào trường bộ lọc Yêu cầu kéo trên GitHub.

nhập mô tả hình ảnh ở đây


Đây là IMO cách tốt nhất, nếu PR chưa được hợp nhất.
Sebastian Wagner

3

Tôi đã có vấn đề tương tự và đã viết trình trợ giúp bash pr_for_sha, được ghi lại ở đây:

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

Gọi nó như thế pr_for_sha <COMMIT>và nó sẽ mở trang yêu cầu kéo github tương ứng trong trình duyệt.


2
Giải pháp này giả định rằng hợp nhất gần nhất sau cam kết là hợp nhất có chứa cam kết, điều này không nhất thiết luôn luôn như vậy.
Jason Denney

@JasonDenney Bằng cách theo bạn có nghĩa là trong chi nhánh nhất định hoặc trong thời gian?
LeZuse ngày

Hmm, đây là một thời gian trước đây, nhưng tôi nghĩ rằng tôi có nghĩa là trong thời gian. Nói vào thứ Hai, bạn thực hiện một cam kết "X" trong nhánh A, Thứ ba bạn thực hiện một cam kết trong nhánh B và hợp nhất nhánh B thành chủ, Thứ tư bạn hợp nhất nhánh A thành chủ. Nếu bạn đã sử dụng tập lệnh này để thực hiện tìm kiếm trong khi ở nhánh chính có PR cam kết "X", tôi chắc chắn rằng nó sẽ không chính xác cho bạn biết chi nhánh B. Mặc dù vậy, hãy tự kiểm tra lại.
Jason Denney

Không thể nhận git loglệnh để làm việc. 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.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.