git checkouts หมายความว่าอย่างไร?


96

อะไรคือcheckoutในคอมไพล์?

ฉันรู้ว่าเมื่อคุณทำcheckoutกับสาขาใดสาขาหนึ่งHEADชี้ไปที่สาขานั้น แต่จริงๆแล้วมันหมายความว่าอย่างไร? หมายความว่าฉันสามารถทำงานในสาขานั้นได้หรือไม่? ถ้าใช่หากไม่ได้ตรวจสอบสาขาฉันไม่สามารถทำงานได้?

นอกจากนี้remote checkoutหมายความว่าอย่างไร? มีประโยชน์อย่างไร?


1
ไม่ได้ถ่าย ใช่ฉันมีและฉันเจอทฤษฎีที่ว่ามันหมายถึงอะไร เช่นชี้ไปที่ HEAD เป็นต้น แต่อยากทราบว่าจาก "รหัสชำระเงิน - ทำการเปลี่ยนแปลง - เช็คอิน" มุมมองหรือไม่?
daehaai

25
@antonijn - ฉันได้ลอง googling คำถาม - นี่เป็นผลลัพธ์แรก - น่าเศร้าที่เมื่อฉันมาถึงที่นี่ฉันเห็นว่าคำถามถูกปิดและทัศนคติที่บ้าคลั่งนี้ทุกคนมี - ฉันมาจากพื้นหลัง TFS และฉัน "ฉันเริ่มสงสัยว่า" การชำระเงิน "หมายถึงสิ่งที่แตกต่างไปจากเดิมอย่างสิ้นเชิงใน GIT ฉันต้องการทราบความหมายใน git-land
BrainSlugs83

คำตอบ:


60

ตามที่คุณสังเกตเห็นHEADคือป้ายกำกับที่ระบุว่าคุณอยู่ที่ใดในโครงสร้างการคอมมิต มันเคลื่อนที่ไปพร้อมกับคุณเมื่อคุณย้ายจากการกระทำหนึ่งไปยังอีก git checkout <commit>เป็นกลไกพื้นฐานสำหรับการเคลื่อนที่ไปรอบ ๆ ในโครงสร้างการคอมมิตโดยย้ายโฟกัสของคุณ ( HEAD) ไปยังคอมมิตที่ระบุ

กระทำสามารถระบุได้โดยใด ๆ ของหลายวิธีกระทำกัญชาชื่อสาขาชื่อแท็กไวยากรณ์ญาติ ( HEAD^, HEAD~1ฯลฯ ) และอื่น ๆ มักเป็นประโยชน์ในการพิจารณาการชำระเงินเพื่อเปลี่ยนสาขาและมีตัวเลือกบางอย่างที่ใช้งานได้จากมุมมองนั้น แต่การอ้างอิงทั้งหมดยอมรับ

ในการชำระเงินการคอมมิตมีผลกระทบด้านอื่นนอกเหนือจากการเคลื่อนที่HEADไปมา

  • ไดเร็กทอรีการทำงานถูกอัพเดตเป็นสถานะของคอมมิตที่เช็คเอาต์
  • หากระบุชื่อสาขาการชำระเงินจะทำให้สาขานั้นใช้งานได้ สาขาที่ใช้งานอยู่จะย้ายไปพร้อมกับคอมมิตใหม่ที่เพิ่มเข้ามา
    • ด้วย-bตัวเลือกสาขาใหม่จะถูกสร้างขึ้นตามการกระทำปัจจุบันจากนั้นทำให้แอ็คทีฟ
    • ด้วย--trackตัวเลือกสาขาที่เช็คเอาต์สามารถทำให้ทราบถึงสาขาที่อยู่ห่างไกล
    • ด้วย--orphanตัวเลือกสาขาใหม่จะถูกสร้างขึ้น (เช่นเดียวกับ-b) แต่จะไม่อิงตามคอมมิตที่มีอยู่

มีตัวเลือกมากขึ้นไม่กี่ซึ่งคุณสามารถอ่านเกี่ยวกับในเป็นคอมไพล์เช็คเอาคนหน้าHEADเพียงแค่แตกต่างกันในสิ่งที่มีผลว่าการย้ายมีนอกเหนือไปจากการเคลื่อนย้าย - ทั้งหมดที่หมุนรอบการเคลื่อนย้ายจากที่หนึ่งไปยังอีกที่กระทำ


ดังนั้นดูเหมือนว่า "การชำระเงิน" หมายความว่ามีบางอย่างที่แตกต่างไปจากเดิมอย่างสิ้นเชิง (เมื่อเทียบกับ TFS อย่างไรก็ตามสิ่งที่เทียบเท่ากับ TFS จะเป็นการ "รับ" ชุดการเปลี่ยนแปลง "โดยเฉพาะ) ดีใจที่ได้ดูสิ่งนี้! - มีค่าคงที่เวทมนตร์สำหรับ "ล่าสุด" หรือไม่? (ใน TFS คือ "T") - ด้วยวิธีนี้เราสามารถดาวน์โหลดโค้ดเวอร์ชันล่าสุดโดยไม่ทราบป้ายกำกับ "HEAD" ได้หรือไม่?
BrainSlugs83

1
หากคุณอยู่ในสาขาชื่อสาขาคือคอมมิตล่าสุดสำหรับสาขานั้น - หากคุณไม่ได้อยู่ในสาขาแสดงว่าคุณอยู่ในคอมมิตล่าสุด ฉันจะใช้คำสั่งบันทึกเพื่อค้นหาการกระทำล่าสุดในที่เก็บโดยไม่คำนึงถึงสาขาจากนั้นย้ายไปที่ด้วยตนเอง - แต่ฉันแน่ใจว่ามันสามารถทำงานได้โดยอัตโนมัติหากจำเป็น
David Culp

เกี่ยวกับย่อหน้าสุดท้าย: โปรดทราบว่าgit checkout <commit> <path>ห้ามสลับสาขา
galath

คำอธิบายของคุณไม่ได้ผิด แต่คุณลืมสิ่งที่สำคัญมาก (และอาจเป็นอันตราย) git checkout <path>กรณีการใช้งาน:
Eric Duminil

24

ให้ฉันอธิบายบางกรณีการใช้งานของการชำระเงินด้วยไฟล์โฟลเดอร์และสาขาเพื่อที่จะเป็นประโยชน์ในการทำความเข้าใจ

สมมติว่าเรามีชื่อโฟลเดอร์devและindex.htmlมีการติดตามทุกอย่างและไดเรกทอรีการทำงานนั้นสะอาด

หากฉันเปลี่ยนชื่อไฟล์โดยไม่ได้ตั้งใจindex.htmlและฉันต้องการเลิกทำที่ฉันจะใช้git checkout index.htmlมันก็จะกู้คืนสถานะไฟล์นั้นจากที่เก็บสาขาที่เลือกในปัจจุบัน

ตอนนี้ถ้าฉันทำการเปลี่ยนแปลงในdevโฟลเดอร์และต้องการกู้คืน ฉันสามารถใช้ได้git checkout devแต่ถ้ามีชื่อสาขาอยู่แล้วdevแทนที่จะตรวจสอบโฟลเดอร์นั้นมันจะดึงสาขานั้นลงมา git checkout -- devเพื่อหลีกเลี่ยงการที่ผมค่อนข้างจะทำ

ตอนนี้เส้นประคู่เปล่าย่อมาจาก branch ปัจจุบันและขอ git สำหรับโฟลเดอร์devจากสาขาที่เลือกในปัจจุบัน

ในทำนองเดียวกันถ้าฉันทำgit checkout alpha devมันจะดึงโฟลเดอร์ dev จากสาขาอัลฟา

คำตอบนี้สำหรับคำถามแรกของคุณ "git checkout really mean"


2
ในบรรทัดสุดท้ายของคุณคำตอบนี้มีไว้สำหรับคำถามแรกของคุณ "git checkout really mean" คุณกำลังตรวจสอบโฟลเดอร์ 'จริงๆ' จากสาขา 'mean': P
Paramvir Singh Karwal

22

"เพื่อตรวจสอบ" หมายความว่าคุณรับคอมมิตที่กำหนดจากที่เก็บและสร้างสถานะของไฟล์ที่เกี่ยวข้องและแผนผังไดเร็กทอรีใหม่ในไดเร็กทอรีการทำงาน

เมื่อคุณตรวจสอบการกระทำที่ไม่ใช่หัวสาขา (เช่นgit checkout HEAD~2) คุณจะอยู่ในสิ่งที่เรียกว่าหัวแยก คุณสามารถสร้างคอมมิตได้ที่นี่ แต่เมื่อคุณเปลี่ยนไปใช้สาขาอื่นคอมมิตเหล่านั้นจะไม่สามารถกู้คืนได้โดยใช้ชื่อสาขาและอาจถูกลบออกโดยตัวรวบรวมขยะในภายหลัง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.