Câu trả lời:
Kể từ ngày 15.08.2016 GitHub cho phép thay đổi nhánh mục tiêu của một yêu cầu kéo thông qua GUI. Nhấp vào Edit
bên cạnh tiêu đề, sau đó chọn nhánh từ trình đơn thả xuống.
Bây giờ bạn có thể thay đổi nhánh cơ sở của một yêu cầu kéo mở. Sau khi bạn đã tạo một yêu cầu kéo, bạn có thể sửa đổi nhánh cơ sở để những thay đổi trong yêu cầu kéo được so sánh với một nhánh khác. Bằng cách thay đổi nhánh cơ sở của yêu cầu kéo ban đầu của bạn thay vì mở một nhánh mới với nhánh cơ sở chính xác, bạn sẽ có thể giữ lại các công việc và thảo luận có giá trị.
Người gửi có thể thay đổi điều đó khi họ đưa ra yêu cầu kéo, nhưng khi họ đưa ra yêu cầu đó, bạn không thể thay đổi nó.
Mặt khác, bạn có thể hợp nhất nhánh và đẩy của chúng theo cách thủ công, điều mà tôi thường xuyên làm đối với các yêu cầu kéo được nhắm mục tiêu sai.
Bạn có thể thấy hub
gem hữu ích trong việc làm việc với các thành phần của pull request.
Viên ngọc đó kết thúc quy trình thủ công, đó là:
git checkout ${target_branch} && git merge ${remote}/${branch}
git push origin ...
git merge --no-ff ...
như @GuillermoMansilla đề cập trong câu trả lời của anh ấy.
Một giải pháp thay thế cho việc sử dụng hub gem được đề cập bởi các câu trả lời khác là sử dụng dòng lệnh để hợp nhất các yêu cầu kéo cục bộ , cho phép bạn thực hiện:
$ git fetch origin
$ git checkout *target_branch*
$ git merge pr/XXX
$ git push origin *target_branch*
Các lệnh trên chỉ hoạt động trực tiếp nếu trước tiên bạn thêm dòng sau vào .git/config
tệp của mình :
fetch = +refs/pull/*/head:refs/remotes/symbolic_name_origin_or_upstream/pr/*
Điều đó cho phép bạn tải xuống TẤT CẢ các yêu cầu kéo. Vì điều đó có thể không được mong muốn đối với các kho lưu trữ lớn, GitHub đã sửa đổi hướng dẫn để làm nổi bật git fetch origin pull/ID/head:BRANCHNAME
cú pháp, tránh sửa đổi tệp cấu hình và chỉ tải xuống yêu cầu kéo duy nhất đó.
Mặc dù bạn không thể thay đổi yêu cầu kéo hiện tại vì nó không phải của bạn, bạn có thể dễ dàng tạo một yêu cầu mới nếu kho lưu trữ nguồn liên quan vẫn tồn tại - có, ngay cả khi nó là của người khác.
Đi đến kho lưu trữ của người gửi, sau đó tạo một yêu cầu kéo mới trong kho lưu trữ của họ bằng cách sử dụng cùng các cam kết nhưng đảm bảo bạn đặt đúng nhánh mục tiêu.
Sau đó, quay lại kho lưu trữ của riêng bạn và chấp nhận yêu cầu kéo mới. Thì đấy!
Không có gì sai với giải pháp của Daniel Pittman, tuy nhiên tôi sẽ coi những hợp nhất đó là "không tua đi nhanh", tức là thay đổi bước số 3 cho:
git checkout ${target_branch} && git merge --no-ff ${remote}/${branch}
Bằng cách sử dụng --no-ff
, lịch sử sẽ dễ đọc hơn. Nó sẽ nói rõ ràng rằng các $n
cam kết đến từ đâu $branch
, và nó cũng sẽ giúp cuộc sống của bạn dễ dàng hơn nếu bạn cần hoàn nguyên điều gì đó đã thực hiện trong nhánh đó.
Để trả lời câu hỏi của eoinoc và đưa ra một mẹo bổ sung:
Sau khi thực hiện hợp nhất, git cli của bạn sẽ nhắc bạn viết một tin nhắn, thường thì một tin nhắn chung chung sẽ hiển thị với nội dung như
Hợp nhất chi nhánh theo dõi từ xa 'người dùng / chi nhánh của họ' vào chi nhánh của bạn
Đảm bảo chỉnh sửa thông báo đó và bao gồm tham chiếu đến số yêu cầu kéo. Đó là: (Giả sử số yêu cầu kéo là 123)
Hợp nhất chi nhánh theo dõi từ xa 'người dùng / chi nhánh của họ' vào chi nhánh của bạn
refs # 123 giải quyết bất cứ điều gì ...
Vì vậy, lần tới khi bạn truy cập trang các vấn đề github / các yêu cầu kéo và kiểm tra yêu cầu kéo cụ thể đó, bạn sẽ thấy thông báo của mình với một liên kết để cam kết nơi bạn đã thực hiện hợp nhất.
Đây là một ảnh chụp màn hình của những gì tôi muốn nói.
Để làm điều đó, hãy truy cập trang chủ của kho lưu trữ của bạn, nhấp vào các nhánh và thay đổi nhánh mặc định từ cái chính thành một cái khác, trong trường hợp của tôi là "dev".
Sau đó, bất cứ khi nào ai đó tạo một yêu cầu kéo, merge
nút sẽ tự động hợp nhất yêu cầu đó thành "dev" chứ không phải master.