Cách thực hiện yêu cầu kéo GitHub


283

Làm cách nào để tạo và / hoặc gửi yêu cầu kéo đến kho lưu trữ khác được lưu trữ trên GitHub?


2
Điều này không được giải thích đầy đủ trong các trang trợ giúp GitHub sao?
lanzz

27
@lanzz Không, trang trợ giúp không bao gồm một số mẹo hữu ích mà tôi muốn tôi biết trước khi thực hiện các yêu cầu kéo đầu tiên của mình (xem bên dưới).
VonC

9
@ianzz tất nhiên trang của Github là "đủ", nhưng có nhiều cách để học. Những gì tôi cố gắng làm là làm cho một hướng dẫn cấp độ mới bắt đầu. Điều tôi thấy thiếu trong lời giải thích của Github là: 1) nó không được chứa trong một nguồn (hai trang không được liên kết rõ ràng), 2) không ngắn gọn (những trang đó rất dài, dài = quá sức), 3) không được giải thích bằng thuật ngữ của con người trong các phần chính. Trong giảng dạy, giáo viên có nhiều kinh nghiệm hơn luôn khó biết những gì người mới bắt đầu không biết. Đặt mình vào vị trí của người mới bắt đầu là mục đích của tôi khi viết bài này.
tim peterson

12
Long có thể có nghĩa là áp đảo có nghĩa là hủy bỏ = không học. Người ta có thể "kết thúc sự hiểu biết về quá trình liên quan" thông qua nhiều con đường mà rõ ràng không phải là một trong số họ. Để kết thúc cuộc chiến rực lửa, không cần phải trả lời, tôi hiểu bạn đến từ đâu.
tim peterson

8
Bạn thực hiện một yêu cầu kéo từ ngã ba của riêng bạn. Đó chắc chắn không phải là giả định ban đầu của tôi.
Derek Illchuk

Câu trả lời:


236

(Ngoài "Trang trợ giúp GitHub chính thức 'Sử dụng trang yêu cầu kéo ",
xem thêm " Ngã ba so với phân nhánh trong GitHub ", " Sự khác biệt giữa nguồn gốc và ngược dòng trong GitHub ")

Vài lời khuyên về yêu cầu kéo:

Giả sử rằng bạn đã rẽ nhánh lần đầu tiên , đây là những gì bạn nên làm trong ngã ba mà bạn sở hữu:

  • tạo một nhánh : cô lập các sửa đổi của bạn trong một nhánh. Đừng tạo một yêu cầu kéo từ đó master, nơi bạn có thể bị cám dỗ tích lũy và trộn một vài sửa đổi cùng một lúc.
  • rebase nhánh đó : ngay cả khi bạn đã thực hiện yêu cầu kéo từ nhánh đó, việc khởi động lại nó trên đầu origin/master(đảm bảo bản vá của bạn vẫn hoạt động) sẽ tự động cập nhật yêu cầu kéo (không cần phải nhấp vào bất cứ thứ gì)
  • cập nhật chi nhánh đó : nếu yêu cầu kéo của bạn bị từ chối, bạn chỉ cần thêm cam kết mới và / hoặc làm lại hoàn toàn lịch sử của mình: nó sẽ kích hoạt lại yêu cầu kéo hiện tại của bạn.
  • "tập trung" chi nhánh đó : nghĩa là làm cho chủ đề của nó "chặt chẽ", không sửa đổi hàng ngàn lớp và tất cả ứng dụng, chỉ thêm hoặc sửa một tính năng được xác định rõ, giữ cho các thay đổi nhỏ .
  • xóa chi nhánh đó : một khi được chấp nhận, bạn có thể xóa chi nhánh đó một cách an toàn trên ngã ba của mình (và git remote prune origin). GUI GitHub sẽ đề xuất cho bạn xóa chi nhánh trong trang yêu cầu kéo.

Lưu ý: để tự viết Yêu cầu kéo, hãy xem " Cách viết yêu cầu kéo hoàn hảo " (Tháng 1 năm 2015, GitHub)


Tháng 3 năm 2016: Tùy chọn nút hợp nhất PR mới: xem " Github squash cam kết từ giao diện web theo yêu cầu kéo sau khi xem xét nhận xét? ".

bí đao

Người duy trì repo có thể chọn merge --squashnhững cam kết PR đó.


Sau khi yêu cầu kéo

Về điểm cuối cùng, kể từ tháng 4, 10 năm 2013, " Nút hợp nhất được thiết kế lại ", chi nhánh sẽ bị xóa cho bạn:

nút hợp nhất mới

Xóa các nhánh sau khi bạn hợp nhất cũng đã được đơn giản hóa.
Thay vì xác nhận xóa bằng một bước bổ sung, chúng tôi ngay lập tức xóa chi nhánh khi bạn xóa nó và cung cấp một liên kết thuận tiện để khôi phục chi nhánh trong trường hợp bạn cần lại .

Điều đó xác nhận thực tiễn tốt nhất để xóa chi nhánh sau khi hợp nhất một yêu cầu kéo.


pull-request so với request-pull


ghi chú điện tử cho "reposotory" (sic)

<humour>

Điều đó (yêu cầu kéo) thậm chí không được xác định đúng bởi GitHub!

May mắn thay, một tổ chức tin tức kinh doanh thực sự sẽ biết và có một lưu ý điện tử để thay thế pull-thay thế bằng 'e-note' :

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

Vì vậy, nếu repos o tory của bạn cần một ghi chú điện tử ... hãy hỏi Fox Business . Họ đang biết.

</humour>


2
- @ VonC cảm ơn vì điều này. Bạn có phiền khi cung cấp một số mã để chỉ ra những gì bạn đã nói khác với những gì tôi đã nói không? Các branchso với masterquyết định có vẻ như một quan trọng dành / Github của câu trả lời của tôi từ một giải pháp lý thuyết để một cái gì đó mà chúng ta thực sự sẽ sử dụng.
tim peterson

1
@timpeterson thực tế là bạn hoàn toàn có thể thay đổi lịch sử trong nhánh đó và nó sẽ tự động cập nhật yêu cầu kéo, là chìa khóa ở đây: bởi vì yêu cầu kéo phải được thực hiện trên dự án mới nhất. Nếu repo ngược dòng đó có các xác nhận mới, bạn phải khởi động lại chi nhánh của mình trên đỉnh của nó (thay đổi lịch sử của chi nhánh đó) và đẩy nó trở lại ngã ba của bạn: điều đó sẽ tự động cập nhật yêu cầu kéo của bạn (dựa trên cùng chi nhánh đó).
VonC

4
Tôi không hiểu phần nổi loạn. Cái đó làm cái gì? ( trang này làm cho nó nghe giống như khoa học tên lửa nhưng tôi tin là không phải vậy). Lệnh nào bạn sẽ đưa ra tại thời điểm đó "nổi loạn"?
Camilo Martin

1
@CamiloMartin nếu bạn ở trong chi nhánh PR của mình, thì a git pull --rebase upstream/masterthực sự ổn.
VonC

1
@vikramvi master là một nhánh chung với repo gốc mà bạn đã rẽ nhánh. Chi nhánh đó phải luôn phản chiếu repo gốc. Bạn cô lập các bản sửa lỗi của mình trong một nhánh cho PR của bạn. Bạn chỉ sử dụng chủ như một cách để biết những gì trong repo ban đầu (và để khởi động lại nhánh sửa lỗi của bạn trên đầu nó, để đảm bảo hợp nhất yêu cầu kéo dễ dàng)
VonC

202

Để tìm hiểu cách thực hiện yêu cầu kéo, tôi chỉ cần theo dõi hai trang trợ giúp riêng biệt trên Github (được liên kết bên dưới dưới dạng dấu đầu dòng). Các lệnh dòng lệnh sau đây dành cho Phần 1 . Phần 2 , yêu cầu kéo thực tế, được thực hiện hoàn toàn trên trang web của 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
  • Phần 1 : fork repo của ai đó: https://help.github.com/articles/fork-a-repo

    1. nhấp vào nút 'ngã ba' trên repo mà bạn muốn đóng góp, trong trường hợp này: Repo PHP của Dwolla (Dwolla / dwolla-php)
    2. lấy URL cho ngã ba mới tạo của bạn, trong trường hợp này: https://github.com/tim-peterson/dwolla-php.git (tim-peterson / dwolla-php)
    3. nhập git clone->cd dwolla-php->git remote->git fetchchuỗi ở trên để sao chép ngã ba của bạn ở đâu đó trong máy tính của bạn (nghĩa là "sao chép / dán" nó vào, trong trường hợp này third_party TimPeterson$:) và đồng bộ hóa nó với repo chính (Dwolla / dwolla-php)
    4. thực hiện thay đổi của bạn để repo địa phương của bạn
    5. nhập git add->git commit->git pushchuỗi ở trên để đẩy các thay đổi của bạn sang repo từ xa, nghĩa là ngã ba của bạn trên Github (tim-peterson / dwolla-php)
  • Phần 2 : thực hiện yêu cầu kéo: https://help.github.com/articles/USE-pull-requests

    1. truy cập trang web của ngã ba của bạn trên Github ( https://github.com/tim-peterson/dwolla-php )
    2. nhấp vào nút 'pull-request'
    3. kéo pull-request một tên, điền chi tiết về những thay đổi bạn đã thực hiện, nhấp vào nút gửi.
    4. bạn đã hoàn tất!!

4
- @ alexgray, tôi đã để lại lời nhắc bash, ví dụ: Tims-MacBook-Pro:third_party TimPeterson$bởi vì đây là hướng dẫn dành cho người mới bắt đầu và những lời nhắc đó giúp định hướng người dùng.
tim peterson

1
Đúng. Cảm ơn bạn. Một ví dụ làm việc tôi có thể làm theo. Tại sao bạn không có trung tâm git đó?
Thứ bảy

Sau đó git fetch upstream, bạn không cần hợp nhất các thay đổi ngược dòng với bản sao cục bộ của mình, git checkout mastersau đó sử dụng git merge upstream/master?
Sparhawk

@Sparhawk Không, bạn không cần hợp nhất các thay đổi của mình vào bản gốc nằm trong ngã ba của bạn. Yêu cầu kéo đến repo khác chỉ có thể dựa trên chi nhánh. Tuy nhiên, thông thường bạn cũng nên cập nhật chủ nhân của ngã ba khi bạn đi, để thay đổi thành repo "thực" và thường xuyên được đưa trở lại trong vòng lặp trong repo ngã ba của bạn.
ely

1
@HimanshuShekhar có nhưng bạn cần sử dụng ứng dụng máy tính để bàn github hoặc API của họ. Trình duyệt dễ dàng hơn đối với tôi.
tim peterson

70

Để thực hiện yêu cầu kéo, bạn cần thực hiện các bước sau:

  1. Ngã ba một kho lưu trữ (mà bạn muốn thực hiện một yêu cầu kéo). Chỉ cần nhấp vào nút ngã ba trang kho lưu trữ và bạn sẽ có một kho lưu trữ github riêng trước tên người dùng github của bạn.
  2. Sao chép kho lưu trữ vào máy cục bộ của bạn. Phần mềm Github mà bạn đã cài đặt trên máy cục bộ có thể làm điều này cho bạn. Nhấp vào nút nhân bản bên cạnh tên kho lưu trữ.
  3. Thực hiện thay đổi cục bộ / cam kết với các tập tin
  4. đồng bộ hóa các thay đổi
  5. đi đến kho lưu trữ ngã ba github của bạn và nhấp vào nút màu xanh lá cây "So sánh và đánh giá" bên cạnh nút nhánh. (Nút có biểu tượng - không có văn bản)
  6. Một trang mới sẽ mở hiển thị các thay đổi của bạn và sau đó nhấp vào liên kết yêu cầu kéo, sẽ gửi yêu cầu đến chủ sở hữu ban đầu của kho lưu trữ mà bạn đã rẽ nhánh.

Tôi phải mất một thời gian để tìm ra điều này, hy vọng điều này sẽ giúp được ai đó.


3
Tôi không rõ ràng rằng bạn cần phải rẽ nhánh trước khi có thể thực hiện yêu cầu kéo. Tôi hình dung một cam kết được đẩy sẽ chỉ đi đến một số loại chi nhánh đang chờ xử lý có quyền truy cập ghi công khai và sau đó được hợp nhất từ ​​đó. Cảm ơn!
Chris Arena

16

Tôi đã bắt đầu một dự án để giúp mọi người thực hiện yêu cầu kéo GitHub đầu tiên của họ. Bạn có thể thực hiện hướng dẫn thực hành để thực hiện PR đầu tiên của mình tại đây

Quy trình làm việc đơn giản như

  • Ngã ba repo trong github
  • Nhận url clone bằng cách nhấp vào nút sao chép
  • Đi đến thiết bị đầu cuối và chạy git clone <clone url you copied earlier>
  • Tạo một nhánh cho những thay đổi bạn đang thực hiện git checkout -b branch-name
  • Thực hiện các thay đổi cần thiết
  • Cam kết thay đổi của bạn git commit
  • Đẩy các thay đổi của bạn lên ngã ba của bạn trên GitHub git push origin branch-name
  • Đi đến ngã ba của bạn trên GitHub để xem Compare and pull requestnút
  • Click vào nó và cung cấp chi tiết cần thiết

15

Đối với những người trong chúng tôi có tài khoản github.com, nhưng chỉ nhận được thông báo lỗi khó chịu khi chúng tôi nhập "git" vào dòng lệnh, đây là cách thực hiện tất cả trong trình duyệt của bạn :)

  1. Giống như Tim và Farhan đã viết: Ngã ba bản sao dự án của riêng bạn: Bước 1: Ngã ba
  2. Sau vài giây, bạn sẽ được chuyển hướng đến bản sao dự án của riêng bạn: Bước 2
  3. Điều hướng đến (các) tệp bạn cần thay đổi và nhấp vào "Chỉnh sửa tệp này" trên thanh công cụ: Bước 3: Chỉnh sửa tập tin
  4. Sau khi chỉnh sửa, hãy viết một vài từ mô tả các thay đổi và sau đó là "Cam kết thay đổi", cũng như với nhánh chính (vì đây chỉ là bản sao của chính bạn chứ không phải là dự án "chính"). Bước 4: Cam kết thay đổi
  5. Lặp lại các bước 3 và 4 cho tất cả các tệp bạn cần chỉnh sửa, sau đó quay lại thư mục gốc của bản sao dự án. Ở đó, nhấp vào nút "So sánh, đánh giá ..." màu xanh lá cây: Bước 5: Bắt đầu gửi
  6. Cuối cùng, nhấp vào "Tạo yêu cầu kéo" .. và sau đó "Tạo yêu cầu kéo" một lần nữa sau khi bạn kiểm tra kỹ tiêu đề và mô tả của yêu cầu của bạn: nhập mô tả hình ảnh ở đây

3

Tôi đã làm theo hướng dẫn của peterson nhưng tôi đã tạo một chi nhánh địa phương cho những thay đổi của mình. Tuy nhiên, sau khi đẩy tôi không thấy chi nhánh mới trong GitHub. Giải pháp là thêm -u vào lệnh đẩy:

git push -u origin <branch>

Bạn có nhận thấy 2 tên người dùng trong url không? Đầu tiên là tim-petersonlần thứ 2Dwolla
peterson

3
Ngoài ra, điều này là tốt hơn như là một nhận xét cho câu trả lời của tôi. Bạn có thể nhận được một số downvote.
tim peterson

1

Tôi đã viết một chương trình bash thực hiện tất cả công việc thiết lập một nhánh PR cho bạn. Nó thực hiện chuyển đổi nếu cần thiết, đồng bộ hóa với dòng ngược, thiết lập điều khiển từ xa ngược dòng, v.v. và bạn chỉ cần thực hiện các sửa đổi của mình, đẩy và gửi PR.

Đây là cách bạn chạy nó:

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

Bạn sẽ tìm thấy chương trình ở đây và kho lưu trữ của nó cũng bao gồm hướng dẫn từng bước để thực hiện quy trình tương tự theo cách thủ công nếu bạn muốn hiểu cách thức hoạt động của nó và cũng có thêm thông tin về cách giữ cho nhánh tính năng của bạn cập nhật ngày với chủ thượng nguồn và các mẩu tin hữu ích khác.


0

Các đơn giản nhất GitHub Kéo Yêu cầutừ giao diện web mà không cần sử dụng git.

  1. Đăng ký tài khoản GitHub, đăng nhập sau đó vào trang trong kho lưu trữ bạn muốn thay đổi.
  2. Nhấp vào biểu tượng bút chì ,

    tìm kiếm văn bản gần vị trí, thực hiện bất kỳ chỉnh sửa nào bạn muốn sau đó xem trước chúng để xác nhận. Đưa ra thay đổi được đề xuất mô tả tối đa 50 ký tự và tùy chọn mô tả mở rộng sau đó nhấp vào nút Thay đổi tệp đề xuất .

  3. Nếu bạn đang đọc này, bạn sẽ không có quyền ghi vào kho lưu trữ (thư mục dự án), vì vậy GitHub sẽ tạo một bản sao của kho lưu trữ (thực sự là một nhánh) trong tài khoản của bạn. Nhấp vào nút Tạo yêu cầu kéo .

  4. Đưa ra yêu cầu Kéo mô tả và thêm bất kỳ nhận xét nào, sau đó nhấp vào nút Tạo yêu cầu kéo .
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.