Thay đổi ngược dòng của nhánh với Magit


47

Khi bạn đẩy một nhánh bằng Magit (với P P) và nhánh đó không có dòng ngược, Magit sẽ hỏi bạn tên của nhánh bạn muốn đẩy tới. Thật tuyệt.

Tuy nhiên, khi bạn đặt ngược dòng cho một nhánh, Magit không còn hỏi bạn muốn đẩy nó ở đâu nữa. Điều này thường thuận tiện (bạn không muốn được hỏi mỗi lần), nhưng điều đó gây khó khăn khi đẩy một nhánh đến một nhánh từ xa khác.

Có cách nào để Magit hỏi tôi một lần nữa về nhánh đích, ngay cả khi nhánh hiện tại đã có một dòng ngược?


Ca sử dụng

Điều khá phổ biến là tôi có một chi nhánh như thế này:

Local:    issue-30 ~/Git-Projects/repo/
Remote:   issue-30 @ origin (git@github.com:.../repo.git)
Head:     ebe4054 Some commit message

và tôi muốn thay đổi cả hai nhánh Local và Remote thành issue-30-and-34. Nếu tôi chỉ đổi tên chi nhánh địa phương, tôi sẽ để lại điều này:

Local:    issue-30-and-34 ~/Git-Projects/repo/
Remote:   issue-30 @ origin (git@github.com:.../repo.git)
Head:     ebe4054 Some commit message

Ngay cả khi tôi xóa origin/issue-30, làm P Ptrên issue-30-and-34 sẽ chỉ đơn giản là tạo lại origin/issue-30.

Những gì tôi kết thúc là như sau, nhưng nó cảm thấy khá tròn trịa cho một cái gì đó có thể được thực hiện trong một gitlệnh duy nhất :

  1. Tạo một nhánh mới được gọi issue-30-and-34 (thay vì đổi tên cũ),
  2. xóa cả phiên bản cục bộ và từ xa của issue-30,
  3. đẩy issue-30-and-34(vì nó chưa có thượng nguồn, Magit sẽ hỏi tôi đẩy ở đâu).

Vui lòng xem xét chấp nhận câu trả lời của @tarsius thay vì của tôi (để dễ tìm thông tin liên quan hơn ).
Constantine

@Được thực hiện.
Malabarba

Câu trả lời:


60

Bắt đầu với v2.1bạn có thể thay đổi ngược dòng của nhánh hiện tại thành một nhánh từ xa hoặc cục bộ bằng cách sử dụng bu[REMOTE/]BRANCHRET. Bắt đầu với v2.4, nếu một dòng ngược đã được thiết lập, sau đó busẽ bỏ đặt nó. Nhấn umột lần nữa để thiết lập một giá trị mới.

Bắt đầu với v2.4và nếu ngược dòng không được đặt, bạn cũng có thể thiết lập ngược dòng trong khi đẩy bằng cách sử dụng pu[REMOTE/]BRANCHRET. Bạn sẽ tự động được hỏi chi nhánh nào được sử dụng làm thượng nguồn. Khi một thượng nguồn đã được thiết lập pusẽ đẩy đến đó mà không cho phép bạn thay đổi ngược dòng. Vì vậy, để thay đổi ngược dòng, bạn phải sử dụng cách tiếp cận được mô tả trong đoạn trước.

Trước v2.4đó cũng có thể đặt nhánh từ xa mà bạn đang đẩy lên làm nhánh ngược dòng bằng cách sử dụng p-ueREMOTE/BRANCHRET. Nhưng bây giờ, --set-upstreamcông tắc không còn khả dụng trong cửa sổ bật lên theo mặc định . Bạn có thể lấy lại bằng cách đặt magit-push-current-set-remote-if-missingthành không. Điều đó có hai hiệu ứng: công --set-upstreamtắc sẽ có sẵn một lần nữa sau lần khởi động lại tiếp theo và cách tiếp cận được mô tả trong đoạn trước sẽ không còn hoạt động.


Nếu bạn muốn cả hai tính năng được mô tả trong đoạn thứ hai và thứ ba có sẵn cùng một lúc, sau đó bỏ trống magit-push-current-set-remote-if-missingvà thêm tính năng này vào tệp init của bạn:

(magit-define-popup-switch 'magit-push-popup
  ?u "Set upstream" "--set-upstream")

11

Nhấn " P C-u C-u P" để làm Magit hỏi bạn sử dụng nhánh từ xa và từ xa nào trước khi đẩy.

(Với một đối số tiền tố duy nhất (" P C-u P") Magit hỏi nên sử dụng từ xa nào.)

Tôi đã tìm thấy điều này bằng cách nhấn P C-h k Pvào bộ đệm trạng thái Magit, đọc các tài liệu của magit-pushmagit-push-dwim(những tài liệu này dường như đã lỗi thời, BTW) và thử nghiệm.

PS: Tôi sử dụng Magit magit-1.2.0-2049-ge6839e8.


5
Câu trả lời này là một chút lỗi thời.
Szymon Wygnański

1

Có vẻ như nó nằm dưới phần nhánh / cấu hình bây giờ:

b C p để đặt PushRemote


Bất kỳ ý tưởng làm thế nào để xác định một điều khiển từ xa bên cạnh mặc định?
scry

0

Kể từ tháng 11 năm 2016 và mới nhất magit, đây là một giải pháp một phần:

P e- cho phép bạn đẩy elsewhere, nhưng nó không được nhớ

Tôi không thể tìm ra cách nào cho phép thuật --set-upstream, vì vậy tôi chỉ làm điều này từ thiết bị đầu cuối, một kiểu gian lận nhưng nó đã giúp tôi vượt qua vấn đề này:

git push --set-upstream origin <branch-name>

Và bây giờ, thượng nguồn mới được lưu và tôi có thể xây dựng điều tiếp theo của mình :)


1
"Tôi không thể tìm cách [...] đến --set-upstream" - Có lẽ bạn nên thử đọc câu trả lời của tarsius
npostavs

chắc chắn, đó là những gì đã giúp tôi tìm ra điều này. Chỉ là, magitđã thay đổi một chút kể từ đó và hy vọng của tôi là giải pháp của tôi sẽ cứu ai đó thêm vài phút
Josh.F

1
Đoạn đầu tiên của câu trả lời đó giải thích cách thay đổi ngược dòng, và nó hoạt động theo phép thuật mới nhất.
npostavs
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.