Các bước bạn liệt kê sẽ hoạt động, nhưng có một cách dài hơn cung cấp cho bạn nhiều tùy chọn hơn:
git checkout dmgr2 # gets you "on branch dmgr2"
git fetch origin # gets you up to date with origin
git merge origin/master
Các fetch
lệnh có thể được thực hiện bất cứ lúc nào trước merge
, ví dụ, bạn có thể trao đổi thứ tự của các lấy và thanh toán, bởi vì fetch
chỉ đi giao cho tên từ xa ( origin
) và nói với nó: "gimme tất cả mọi thứ bạn có mà tôi không ", Tức là tất cả các cam kết trên tất cả các chi nhánh. Chúng được sao chép vào kho lưu trữ của bạn, nhưng được đặt tên origin/branch
cho bất kỳ nhánh nào có tên branch
trên điều khiển từ xa.
Tại thời điểm này, bạn có thể sử dụng bất kỳ người xem nào ( git log
, gitk
v.v.) để xem "những gì họ có" mà bạn không có và ngược lại. Đôi khi điều này chỉ hữu ích cho Cảm giác mờ ấm áp ("ah, vâng, thực tế đó là những gì tôi muốn") và đôi khi nó rất hữu ích để thay đổi chiến lược hoàn toàn ("whoa, tôi chưa muốn RẤT NHIỀU thứ đó").
Cuối cùng, merge
lệnh lấy cam kết đã cho, mà bạn có thể đặt tên là origin/master
, và làm bất cứ điều gì cần thiết để đưa vào cam kết đó và tổ tiên của nó, cho bất kỳ nhánh nào bạn đang ở khi bạn chạy merge
. Bạn có thể chèn --no-ff
hoặc --ff-only
để ngăn chuyển tiếp nhanh hoặc chỉ hợp nhất nếu kết quả là chuyển tiếp nhanh, nếu bạn muốn.
Khi bạn sử dụng trình tự:
git checkout dmgr2
git pull origin master
các pull
chỉ thị lệnh git để chạy git fetch
, và sau đó tương đương với đạo đức của git merge origin/master
. Vì vậy, điều này gần giống như thực hiện hai bước bằng tay, nhưng có một số khác biệt tinh tế có lẽ không quá liên quan đến bạn. (Đặc biệt là fetch
bước chạy bởi pull
mang trên chỉ origin/master
, và nó không cập nhật các ref trong repo của bạn: 1 bất kỳ cam kết mới gió lên gọi đến chỉ bởi sự đặc biệt FETCH_HEAD
. Tài liệu tham khảo)
Nếu bạn sử dụng nhiều thứ rõ ràng hơn git fetch origin
(sau đó tùy chọn nhìn xung quanh) và sau đó git merge origin/master
trình tự, bạn cũng có thể mang đến địa phương của riêng bạn master
với điều khiển từ xa, chỉ với một lần fetch
chạy trên mạng:
git fetch origin
git checkout master
git merge --ff-only origin/master
git checkout dmgr2
git merge --no-ff origin/master
ví dụ.
1 Phần thứ hai này đã được thay đổi. Tôi nói "cố định" đã sửa lỗi 1.8.4, hiện đang cập nhật các tham chiếu "nhánh từ xa" một cách cơ hội. (Đó là, như các ghi chú phát hành nói, một quyết định thiết kế có chủ ý bỏ qua bản cập nhật, nhưng hóa ra nhiều người thích git đó cập nhật nó hơn. Nếu bạn muốn SHA-1 chi nhánh từ xa cũ, nó mặc định được lưu trong và do đó có thể phục hồi từ, reflog. Điều này cũng cho phép một tính năng git 1.9 / 2.0 mới để tìm kiếm các cuộc nổi loạn ngược dòng.)