Làm thế nào để thay đổi nhánh cơ sở của một yêu cầu kéo?


79

Tôi đã tạo một yêu cầu kéo về dự án trên GitHub tới một chi nhánh từ xa cụ thể. Sau một thời gian, nhánh từ xa đã bị xóa.

Làm cách nào để thay đổi yêu cầu kéo để trỏ đến một nhánh khác (cụ thể master)?


3
Cũng được yêu cầu tại: github.com/isaacs/github/issues/18 , thông báo được gửi tới GitHub và tiêu chuẩn "chúng tôi sẽ thêm vào câu trả lời của trình duyệt lỗi nội bộ của chúng tôi" đã nhận được.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Câu trả lời:


79

Đã cập nhật: như Michael ghi chú bên dưới, điều này hiện có thể thực hiện được :

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à cuộc thảo luận có giá trị.

Nhấp vào Editnút theo tiêu đề của yêu cầu kéo để hiển thị bộ chọn nhánh cơ sở.

Một ví dụ động về cách thay đổi nhánh cơ sở của yêu cầu kéo.


Câu trả lời cũ

Bạn không thể. Chỉ cần thực hiện một yêu cầu kéo mới.


10
đi thẳng vào vấn đề, nhưng không hoàn toàn đúng - hãy xem câu trả lời này .
Tom

7
Dựa vào chức năng API không có giấy tờ (và có thể là không cố ý) là một công thức dẫn đến nỗi buồn xuống dòng.
Amber

15
Không ai nói gì về việc dựa vào chức năng API không có tài liệu. Câu hỏi này yêu cầu giải pháp cho vấn đề xảy ra một lần, không phải là giải pháp liên tục được hỗ trợ vĩnh viễn. Bất chấp điều đó, để nói rằng "Bạn không thể" chỉ đơn giản là sai sự thật.
Tom

5
Dù bằng cách nào thì API không có giấy tờ cũng bị hỏng ngay bây giờ (xem nhận xét của câu trả lời khác), và điều đó khá đáng buồn.
dequis

2
Kể từ ngày 15.08.2016 bạn có thể. Hãy xem câu trả lời của Michael.
maliayas

35

Mặc dù không có giấy tờ, bạn có thể thực hiện việc này bằng cách sử dụng API GitHub REST.

Việc sử dụng API được giải thích trong câu trả lời này , nhưng về cơ bản bạn có thể đưa ra một yêu cầu REST như sau:

$ curl --user "tom" \
       --request PATCH \
       --data '{"issue": "15", "head": "tom:new-branch", "base": "master"}' \
       https://api.github.com/repos/fred/fabproj/pulls

Điều này sẽ thay đổi yêu cầu kéo được thể hiện trong vấn đề 15 trên fred/fabprojrepo để sử dụng new-branchnhánh trên tom/fabprojngã ba.

Chỉnh sửa: Lưu ý: theo nhận xét, phần trên chỉ để đính kèm một yêu cầu kéo mới vào một vấn đề hiện có .


1
Không thể làm cho nó hoạt động. Nó phàn nàn rằng trường issuecó giá trị không chính xác, có thể gợi ý rằng bạn không thể thay đổi các yêu cầu kéo đã được khởi tạo nữa. Xấu hổ.
mxcl

1
Bạn có chắc là bạn đã gọi đúng API của mình không? Theo như tôi có thể nói, điều này vẫn sẽ hoạt động, và được (kinda) ghi lại. Xem developer.github.com/v3/pulls (và tìm kiếm "Tạo yêu cầu kéo", sau đó xem "Phương thức nhập thay thế")
Tom

14
Tôi đã thử lại tính năng này hôm nay và có thể xác nhận rằng nó không còn hoạt động nữa. Tôi sẽ tiếp tục khám phá các API REST với hy vọng khám phá ra một cách khác để thực hiện việc này.
Tom

1
Theo Tài liệu dành cho nhà phát triển, loại yêu cầu nên bt PATCH. Điều khác là sửa đổi đầu / cơ sở không được hỗ trợ vào lúc này. Ref: developer.github.com/v3/pulls/#update-a-pull-request
Shekhar

4
Này Jian, như Tom đã đề cập trong các bình luận vào ngày 13 tháng 12 năm 12, điều này (thật đáng buồn!) Không còn hoạt động nữa ... thật đáng tiếc, vì lẽ ra hôm nay tôi có thể tận dụng tốt nó, nhưng than ôi!
pvandenberk

19

Kể từ ngày 15/08/2016, điều này hiện có thể thực hiện được thông qua Github :

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à cuộc thảo luận có giá trị.


cách nó hoạt động là một người nhấn chỉnh sửa tiêu đề, và sau đó nút "base:" xuất hiện, sẵn sàng để thay đổi.
AnneTheAgile

2

Tôi có thể thay đổi nhánh mục tiêu. Đúng là chúng tôi không thể chỉnh sửa tên của chi nhánh mục tiêu trong PR. Nhưng mẹo là đổi tên chi nhánh thành một cái gì đó khác và đổi tên chi nhánh mục tiêu của bạn thành chi nhánh hiện tại đã có trong PR.

Ví dụ: PR của tôi có tên như "dev-4.9". Có một nhánh khác được đặt tên là "qa-4.9". Tất cả những gì tôi muốn là "qa-4.9" phải là nhánh mục tiêu PR. Các bước: 1 1) Đổi tên nhánh "dev-4.9" thành một thứ khác "original-dev-4.9"

git checkout dev-4.9
git branch -w original-dev-4.9
git push origin original-dev-4.9

2) Đổi tên nhánh "qa-4.9" thành "dev-4.9".

git checkout qa-4.9
git branch -w dev-4.9
git push origin dev-4.9 -f (force push to write entire branch to reflect dev-4.9)

3) Làm mới url PR và xem các cam kết trong qa-4.9 được phản ánh ở đó.


1

Thay vì mất tất cả các bình luận được kết nối với một PR cho một nhánh đã bị xóa:

  1. tạo lại chi nhánh cục bộ với cùng tên và cùng nội dung mà chi nhánh bạn muốn hợp nhất có;
  2. đẩy nhánh đó để tạo lại nhánh ở xa; và sau đó
  3. mở lại PR cho chi nhánh.

Ví dụ: bạn có PR cho nhánh1, mã này đã bị xóa. Bây giờ bạn muốn hợp nhất để làm chủ và giữ lại các nhận xét về bài PR hiện có của mình:

  1. git tổng thể thanh toán
  2. git kéo
  3. git checkout -b branch1
  4. git push
  5. mở lại PR của bạn cho nhánh1
  6. khi hợp nhất vào nhánh1, hợp nhất thành cái.

Điều này hơi hack, nhưng tốt hơn nhiều so với việc hủy bỏ rất nhiều bình luận.


Tôi đã không theo dõi để bắt đầu vì vậy chỉ để làm rõ cho những độc giả khác (hoặc> = ngu ngốc như tôi), điều này là dành cho nếu bạn đang kiểm soát repo PR của bạn đã được gửi đến. Tôi đang tìm cách cập nhật bài PR của mình mà tôi đã gửi cho một dự án nguồn mở mà tôi không kiểm soát.
rtpHarry

0

Github hỗ trợ điều này ngay bây giờ. Nút chỉnh sửa ở cuối bên phải của PR.


-2

Về lý thuyết ...

bạn phải sử dụng github api .

ví dụ: chỉnh sửa yêu cầu kéo với curl

curl --user "your_github_username" \
     --request PATCH \
     --data '{"title":"newtitle","body":"newbody",...}' \
     https://api.github.com/repos/:owner/:repo/pulls/:number

bạn có thể tìm thấy danh sách dữ liệu được tách ra trong tài liệu nhà phát triển github

ví dụ: thay đổi tên yêu cầu kéo của tôi

curl --user "jeremyclement" \
     --request PATCH \
     --data '{"title":"allows the control of files and folders permissions."}' \
     https://api.github.com/repos/Gregwar/Cache/pulls/9

nhưng trong thực tế ...

Có vẻ như các trường head/labelhead/refkhông thể chỉnh sửa. Hiện tại, giải pháp duy nhất dường như là của Amber


Điều này bổ sung gì cho các câu trả lời hiện tại?
Léo Lam

Nó xác nhận phản ứng của Amber bất chấp Tom.
hexaJer

2
Điều đó khẳng định rằng câu trả lời này là không cần thiết. Điều này không bổ sung gì cho các câu trả lời hiện tại. Câu trả lời của Tom đã có thông báo rằng nó không còn áp dụng nữa, và các bình luận cũng chỉ ra điều này.
Léo Lam
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.