Làm cách nào để thiết lập nhánh ngược dòng để đẩy một nhánh cục bộ vào trạng thái ảo thuật?


11

Từ những gì tôi nhớ, nếu tôi đang làm việc trên một nhánh, ví dụ, my-feature-branchtôi đã từng có thể làm điều này từ magit-statusmenu với P P, và sau đó chọn nhánh từ xa từ danh sách có origin/my-feature-branchở trên cùng. Điều này làm việc rất đẹp.

Gần đây, như cuộc thảo luận này , tôi có thể làm điều gì đó tương tự P -u e(mở magit-push-popup, đặt --set-upstreamcờ và sử dụng echo nơi khác), điều này tương tự cho phép tôi chọn từ danh sách các nhánh bắt đầu origin/my-feature-branch. Điều này làm việc tốt cho tôi quá. Tuy nhiên, gần đây hơn, điều này không còn hoạt động nữa và tôi đã không thể tìm ra cách tốt nhất để thiết lập một nhánh ngược dòng.

Khi tôi sử dụng P etùy chọn đầu tiên cho một nhánh để đẩy tới origin/my-feature-branch, đó gần như luôn là điều tôi muốn. Tuy nhiên, nó không được đặt origin/my-feature-branchlàm thượng nguồn cho chi nhánh địa phương của tôi. Việc sử dụng P ucho phép tôi chọn nhánh ngược dòng, nhưng origin/my-feature-branchkhông có trong danh sách và tôi phải gõ origin/my-feature-branchmà không hoàn thành tab (Tôi biết điều này không khó, nhưng nó dễ bị lỗi người dùng và chậm hơn dòng lệnh).

Đây có phải là cách duy nhất để thiết lập một nhánh ngược dòng bây giờ, hoặc tôi đang thiếu một cái gì đó? Tôi đã xem xét các cuộc thảo luận và tài liệu khác liên quan đến vấn đề này, nhưng tất cả các nguồn tôi tìm thấy dường như đã lỗi thời.


1
Tôi nghĩ rằng <remote>/<branch>phần này đã vô tình rời khỏi dấu nhắc (xem bình luận này ). Trong khi đó, bạn có thể đặt magit-push-current-set-remote-if-missingthành không.
Kyle Meyer

Tôi vừa sửa nó. Câu trả lời của tôi dưới đây giả định rằng sửa chữa.
tarsius

Tìm thấy và sửa một số vấn đề liên quan khác. Có lẽ bạn sẽ phải chờ vài giờ để Melpa bắt kịp trước khi mọi thứ bên dưới chính xác 100%.
tarsius

Câu trả lời:


11

Có một số cách để thiết lập ngược dòng, trong khi đẩy hoặc không đẩy cùng một lúc.

Nếu magit-push-current-set-remote-if-missingkhông phải nil(mặc định), thì bạn sẽ thấy một cái gì đó như:

Push feature to
 p pushRemote, after setting that
 u @{upstream}, after setting that
 e elsewhere

Để đẩy origin/featurevà đặt đó là nhấn ngược dòng uvà sau đó RETchấp nhận ứng cử viên hoàn thành mặc định.

Nếu magit-push-current-set-remote-if-missingnil, thì bạn sẽ thấy điều này thay vào đó:

Push feature to
 e elsewhere

Nếu bạn đã nhấn pbây giờ, thì bạn sẽ được thông báo rằng dòng ngược không được cấu hình (ngụ ý rằng bạn không thể đẩy lên thượng nguồn nếu không có ngược dòng).

Nhưng nếu magit-push-current-set-remote-if-missingnil, thì danh sách các công tắc sẽ có --set-upstream, vì vậy bạn có thể sử dụng P - u pnhư bạn đã quen (ngoại trừ p thứ hai là chữ thường). Có một điều phức tạp: sau khi thay đổi giá trị, magit-push-current-set-remote-if-missingbạn phải khởi động lại Emacs --set-upstreamđể xuất hiện hoặc biến mất.

Cuối cùng, bạn có thể thiết lập ngược dòng bằng cách sử dụng lệnh "thiết lập ngược dòng (và không làm gì khác)" : b uorigin/masterRET. Lưu ý rằng khi bạn sử dụng phương pháp này, thì bạn chỉ có thể chọn một nhánh đã tồn tại.


Nhưng nó sẽ tốt hơn để cấu hình đẩy từ xa và đẩy đến đó. Để tìm hiểu thêm về điều khiển từ xa và cách nó khác với ngược dòng, hãy xem nút Phân nhánh trong hướng dẫn thông tin (phiên bản web chưa được cập nhật).

Về cơ bản, nhánh ngược dòng là nhánh mà nhánh tính năng của bạn cuối cùng sẽ được hợp nhất (bằng cách hợp nhất hoặc nổi loạn, chứ không phải bằng cách đẩy), rất có thể origin/master. Và điều khiển từ xa là nơi bạn đẩy các nhánh tính năng của mình đến trong khi vẫn làm việc với chúng hoặc để người khác có thể hợp nhất chúng. Nếu nhánh cục bộ được đặt tên featurevà đẩy từ xa my-forkthì đẩy nhánh đó bằng cách sử dụng P psẽ đẩy tới my-fork/feature. (Không thể định cấu hình "đẩy sang nhánh", tên của nhánh trên điều khiển từ xa luôn giống với tên cục bộ.)

Vì vậy, trong khi câu hỏi của bạn là một câu như "làm thế nào để tôi đẩy ngược dòng, đồng thời cấu hình ngược dòng", thì tôi khuyên bạn không nên đẩy ngược dòng lên mà thay vào đó là đẩy sang điều khiển từ xa.

Miễn là bạn không thay đổi giá trị của magit-push-current-set-remote-if-missingbạn, bạn có thể định cấu hình đẩy từ xa bằng cách sử dụng P psome-remoteRET. Nhưng, vì bạn có thể đẩy tất cả các nhánh tính năng vào cùng một điều khiển từ xa, tốt hơn là đặt điều khiển đẩy một lần cho tất cả các nhánh và được thực hiện với nó: bvà sau đó M-pcho đến khi điều khiển từ xa bên phải được chọn.


Cũng lưu ý rằng thường không cần thiết phải thiết lập rõ ràng nhánh ngược dòng. Khi bạn tạo một nhánh mới và chọn một nhánh từ xa làm điểm bắt đầu, thì đó được sử dụng làm luồng ngược.

Thật không may, điểm bắt đầu thường là một nhánh cục bộ và trong trường hợp đó, Git theo mặc định không sử dụng nó làm thượng nguồn. Nhưng điều đó có thể dễ dàng được khắc phục bằng cách chạy này một lần:

git config --global branch.autoSetupMerge always

Giá trị mặc định là true, có nghĩa là "đặt điểm bắt đầu là ngược dòng, miễn là nó là một nhánh từ xa ".


Nhân tiện, điều tương tự áp dụng cho điều khiển từ xa. Điều đó cũng thường được đặt bán tự động trong kho "mới". Nếu bạn sao chép một kho lưu trữ, bạn sẽ được hỏi liệu bạn có muốn sử dụng originlàm điều khiển từ xa không. Bạn nên trả lời "có", trừ khi bạn sẽ thêm một điều khiển từ xa khác, giả sử my-fork, nên được sử dụng làm điều khiển từ xa. Khi bạn thêm một điều khiển từ xa mới bằng cách sử dụng M aremote.pushDefaultchưa được đặt, thì bạn sẽ được hỏi liệu bạn có muốn sử dụng điều khiển từ xa mới được thêm làm điều khiển từ xa không.

Điều này có thể được cấu hình bằng cách sử dụng magit-clone-set-remote.pushDefaultmagit-remote-add-set-remote.pushDefault.

Một tùy chọn nâng cao khác là magit-branch-prefer-remote-upstream, mặc định nil. Nếu bạn đặt nó thành t, và sau đó chọn một nhánh cục bộ làm điểm bắt đầu cho một nhánh mới, thì dòng ngược của điểm bắt đầu có thể (theo một số quy tắc, xem chuỗi doc) được sử dụng làm dòng ngược, thay vì điểm khởi đầu của chính nó.

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.