สถานะอะไรจะบอกคุณว่าคุณอยู่เบื้องหลังเตะที่เรียกว่าorigin/master ซึ่งเป็นโทษในท้องถิ่น repo ในกรณีนี้การอ้างอิงเกิดขึ้นเพื่อติดตามสาขาในรีโมตบางอันที่เรียกoriginแต่สถานะไม่ได้บอกอะไรคุณเกี่ยวกับสาขาในรีโมต กำลังบอกคุณเกี่ยวกับการอ้างอิงซึ่งเป็นเพียงรหัสการกระทำที่เก็บไว้ในระบบไฟล์ในเครื่องของคุณ (ในกรณีนี้โดยทั่วไปจะเป็นไฟล์ที่เรียกว่า.git/refs/remotes/origin/masterrepo ในเครื่องของคุณ)
git pullดำเนินการสองอย่าง ก่อนอื่นต้องทำgit fetchเพื่อให้ทันกับคอมมิชชันใน repo ระยะไกล (ซึ่งอัพเดตorigin/masterref ใน repo ท้องถิ่นของคุณ) จากนั้นgit mergeจะรวมการคอมมิชชันเหล่านั้นในสาขาปัจจุบัน
จนกว่าคุณจะทำตามfetchขั้นตอน (ไม่ว่าจะด้วยตัวเองหรือผ่านgit pull) repo ในพื้นที่ของคุณไม่มีทางรู้ว่ามีการส่งข้อมูลเพิ่มขึ้นและgit statusดูเฉพาะการorigin/masterอ้างอิงในพื้นที่ของคุณ
เมื่อgit statusพูดถึงปัจจุบันหมายถึง "up-to-date กับสาขาที่สาขาปัจจุบันติดตาม" ซึ่งในกรณีนี้หมายถึง "up-to-date กับผู้อ้างอิงในท้องถิ่นorigin/master" นั่นเท่ากับเท่านั้น "up-to-date กับสถานะ upstream ที่ถูกดึงมาครั้งล่าสุดที่เราทำfetch" ซึ่งไม่เหมือนกับ "up-to-date กับสถานะสดล่าสุดของ upstream"
ทำไมมันถึงทำงานแบบนี้? ดีfetchขั้นตอนคือการดำเนินการเครือข่ายที่อาจเกิดขึ้นช้าและมีราคาแพง การออกแบบของ Git (และระบบควบคุมเวอร์ชันกระจายอื่น ๆ) คือการหลีกเลี่ยงการทำงานของเครือข่ายเมื่อไม่จำเป็นและเป็นรูปแบบที่แตกต่างอย่างสิ้นเชิงกับระบบไคลเอนต์ - เซิร์ฟเวอร์ทั่วไปที่หลายคนคุ้นเคย ของ "สาขาการติดตามระยะไกล" ที่ทำให้เกิดความสับสนที่นี่ไม่ได้ใช้ร่วมกันโดย DVCS ทั้งหมด) เป็นไปได้ทั้งหมดที่จะใช้ Git ออฟไลน์โดยไม่มีการเชื่อมต่อกับเซิร์ฟเวอร์ส่วนกลางและผลลัพธ์ของการgit statusสะท้อนนี้
การสร้างและสลับสาขา (และตรวจสอบสถานะของพวกเขา) ใน Git นั้นควรจะมีน้ำหนักเบาไม่ใช่สิ่งที่ทำให้การทำงานของเครือข่ายช้าไปสู่ระบบรวมศูนย์ ข้อสันนิษฐานในการออกแบบ Git และgit statusผลลัพธ์คือผู้ใช้เข้าใจสิ่งนี้ (ฟีเจอร์ Git มากเกินไปทำให้เข้าใจได้ถ้าคุณรู้แล้วว่า Git ทำงานอย่างไร) ด้วยการยอมรับ Git จากผู้ใช้งานจำนวนมากที่ไม่คุ้นเคยกับ DVCS ข้อสันนิษฐานนี้จึงไม่ถูกต้องเสมอไป