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 fetchlệ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ì fetchchỉ đ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/branchcho bất kỳ nhánh nào có tên branchtrê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, gitkv.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, mergelệ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-ffhoặ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 pullchỉ 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à fetchbước chạy bởi pullmang 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/mastertrình tự, bạn cũng có thể mang đến địa phương của riêng bạn mastervới điều khiển từ xa, chỉ với một lần fetchchạ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.)