Điều mà trạng thái đang nói với bạn là bạn đứng sau giới thiệu được gọi origin/master
là ref địa phương trong repo địa phương của bạn . Trong trường hợp này, ref xảy ra để theo dõi một nhánh trong một số điều khiển từ xa, được gọi origin
, nhưng trạng thái không cho bạn biết bất cứ điều gì về nhánh trên điều khiển từ xa. Nó cho bạn biết về ref, đó chỉ là một ID cam kết được lưu trữ trên hệ thống tệp cục bộ của bạn (trong trường hợp này, nó thường nằm trong một tệp được gọi .git/refs/remotes/origin/master
trong repo cục bộ của bạn).
git pull
thực hiện hai hoạt động; đầu tiên, nó thực hiện git fetch
để cập nhật các cam kết trong repo từ xa (cập nhật origin/master
ref trong repo cục bộ của bạn), sau đó nó thực hiện git merge
để hợp nhất các cam kết đó vào nhánh hiện tại.
Cho đến khi bạn thực hiện fetch
bước (một mình hoặc thông qua git pull
) thì repo cục bộ của bạn không có cách nào để biết rằng có thêm các cam kết ngược dòng và git status
chỉ nhìn vào origin/master
ref địa phương của bạn .
Khi git status
nói cập nhật, nó có nghĩa là "cập nhật với chi nhánh mà chi nhánh hiện tại theo dõi", trong trường hợp này có nghĩa là "cập nhật với giới thiệu địa phương được gọi origin/master
". Điều đó chỉ tương đương với "cập nhật với trạng thái ngược dòng đã được truy xuất lần trước khi chúng tôi thực hiện fetch
" không giống như "cập nhật với trạng thái trực tiếp mới nhất của thượng nguồn".
Tại sao nó hoạt động theo cách này? Vâng fetch
bước là một mạng lưới hoạt động có khả năng chậm và tốn kém. Thiết kế của Git (và các hệ thống kiểm soát phiên bản phân tán khác ) là để tránh các hoạt động mạng khi không cần thiết và là một mô hình hoàn toàn khác với hệ thống máy khách-máy chủ thông thường mà nhiều người đã sử dụng (mặc dù như đã nêu trong các nhận xét bên dưới, khái niệm của Git của một "nhánh theo dõi từ xa" gây nhầm lẫn ở đây không được chia sẻ bởi tất cả các DVCS). Hoàn toàn có thể sử dụng Git ngoại tuyến, không có kết nối với máy chủ tập trung và đầu ra git status
phản ánh điều này.
Tạo và chuyển đổi các nhánh (và kiểm tra trạng thái của chúng) trong Git được coi là nhẹ, không phải là thứ thực hiện một hoạt động mạng chậm đến một hệ thống tập trung. Giả định khi thiết kế Git và git status
đầu ra là người dùng hiểu điều này (quá nhiều tính năng Git chỉ có ý nghĩa nếu bạn đã biết cách Git hoạt động). Với việc áp dụng Git bởi rất nhiều người dùng không quen thuộc với DVCS, giả định này không phải lúc nào cũng hợp lệ.