Câu trả lời ngắn
Miễn là bạn đang thực hiện hợp nhất chuyển tiếp nhanh , thì bạn chỉ cần sử dụng
git fetch <remote> <sourceBranch>:<destinationBranch>
Ví dụ:
# Merge local branch foo into local branch master,
# without having to checkout master first.
# Here `.` means to use the local repository as the "remote":
git fetch . foo:master
# Merge remote branch origin/foo into local branch foo,
# without having to checkout foo first:
git fetch origin foo:foo
Mặc dù câu trả lời của Amber cũng sẽ hoạt động trong các trường hợp chuyển tiếp nhanh, nhưng sử dụng git fetch
theo cách này thay vào đó an toàn hơn một chút so với việc di chuyển lực lượng tham chiếu chi nhánh, vì git fetch
sẽ tự động ngăn chặn việc không chuyển tiếp vô tình miễn là bạn không sử dụng +
trong refspec.
Câu trả lời dài
Bạn không thể hợp nhất một nhánh B thành nhánh A mà không kiểm tra A trước nếu nó sẽ dẫn đến một sự hợp nhất không chuyển tiếp nhanh. Điều này là do một bản sao làm việc là cần thiết để giải quyết bất kỳ xung đột tiềm năng.
Tuy nhiên, trong trường hợp sáp nhập nhanh, điều này là có thể , bởi vì sự hợp nhất đó không bao giờ có thể dẫn đến xung đột, theo định nghĩa. Để làm điều này mà không cần kiểm tra một chi nhánh trước, bạn có thể sử dụng git fetch
với một refspec.
Đây là một ví dụ về việc cập nhật master
(không cho phép các thay đổi không chuyển tiếp nhanh) nếu bạn có một chi nhánh khácfeature
kiểm tra :
git fetch upstream master:master
Ca sử dụng này rất phổ biến, có lẽ bạn sẽ muốn tạo bí danh cho nó trong tệp cấu hình git của mình, như thế này:
[alias]
sync = !sh -c 'git checkout --quiet HEAD; git fetch upstream master:master; git checkout --quiet -'
Bí danh này làm gì sau đây:
git checkout HEAD
: điều này đặt bản sao làm việc của bạn vào trạng thái tách rời. Điều này rất hữu ích nếu bạn muốn cập nhậtmaster
trong khi bạn tình cờ kiểm tra. Tôi nghĩ rằng điều đó là cần thiết bởi vì nếu không thì tài liệu tham khảo chi nhánh master
sẽ không di chuyển, nhưng tôi không nhớ nếu điều đó thực sự nằm ngay trên đầu tôi.
git fetch upstream master:master
: điều này nhanh chóng chuyển tiếp địa phương của bạn master
đến cùng một nơi vớiupstream/master
.
git checkout -
kiểm tra chi nhánh đã thanh toán trước đó của bạn (đó là những gì -
làm trong trường hợp này).
Cú pháp của git fetch
hợp nhất chuyển tiếp nhanh (không)
Nếu bạn muốn fetch
lệnh không thành công nếu bản cập nhật không chuyển tiếp nhanh, thì bạn chỉ cần sử dụng một refspec của biểu mẫu
git fetch <remote> <remoteBranch>:<localBranch>
Nếu bạn muốn cho phép cập nhật không chuyển tiếp nhanh, thì bạn thêm một +
vào phía trước của refspec:
git fetch <remote> +<remoteBranch>:<localBranch>
Lưu ý rằng bạn có thể chuyển repo cục bộ của mình dưới dạng tham số "từ xa" bằng cách sử dụng .
:
git fetch . <sourceBranch>:<destinationBranch>
Tài liệu
Từ git fetch
tài liệu giải thích cú pháp này (nhấn mạnh của tôi):
<refspec>
Định dạng của một <refspec>
tham số là một dấu cộng tùy chọn +
, theo sau là ref nguồn <src>
, theo sau là dấu hai chấm :
, theo sau là ref đích <dst>
.
Tham chiếu từ xa phù hợp <src>
được tìm nạp và nếu <dst>
không phải là chuỗi rỗng, thì tham chiếu cục bộ phù hợp với nó được chuyển tiếp nhanh bằng cách sử dụng<src>
. Nếu cộng tùy chọn+
được sử dụng, ref cục bộ được cập nhật ngay cả khi nó không dẫn đến cập nhật chuyển tiếp nhanh.
Xem thêm
Kiểm tra Git và hợp nhất mà không cần chạm vào cây làm việc
Sáp nhập mà không thay đổi thư mục làm việc