ความแตกต่างระหว่าง HEAD และมาสเตอร์


188

ความแตกต่างระหว่างHEADและmasterใน Git คืออะไร?

ฉันโคลนโปรเจ็กต์บน GitHub และต้องการผลักดันการเปลี่ยนแปลงของฉันไปยังรีโมต แต่ฉันควรผลักดันอันไหนดี?

ภาพหน้าจอ

คำตอบ:


162

masterเป็นการอ้างอิงถึงจุดสิ้นสุดของสาขา ตามแบบแผน (และโดยค่าเริ่มต้น) นี่เป็นสาขาการรวมหลัก แต่ไม่จำเป็นต้องเป็น

HEADจริงๆแล้วเป็นการอ้างอิงชนิดพิเศษที่ชี้ไปที่การอ้างอิงอื่น มันอาจชี้ไปที่master หรืออาจไม่ (มันจะชี้ไปที่สาขาใดเช็คเอาท์ในปัจจุบัน) หากคุณรู้ว่าคุณต้องการที่จะกระทำในmasterสาขาแล้วผลักไปที่นี้

นี่คือตัวอย่างภาพ:

ข้อความแสดงแทน

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

$ git symbolic-ref HEAD
refs/heads/master

อย่างไรก็ตามการค้นหาตำแหน่งที่remotes/origin/HEADชี้ไปนั้นมีความยุ่งยากมากขึ้นเพราะอยู่บนเครื่องระยะไกล

มีแบบฝึกหัดเล็ก ๆ น้อย ๆ เกี่ยวกับการอ้างอิง git ที่นี่:

http://people.gnome.org/~federico/news-2008-11.html#pushing-and-pulling-with-git-1


1
+1 คำตอบที่แม่นยำยิ่งกว่าของฉัน ดูเพิ่มเติมที่stackoverflow.com/questions/3301956/…และstackoverflow.com/questions/3301956/…สำหรับภาพประกอบรอบแนวคิดเหล่านั้น
VonC

37

คำตอบง่ายๆคือHEADตัวชี้ / ป้ายกำกับการกระทำล่าสุดของสาขาที่คุณเปิดอยู่ masterเป็นสาขาเริ่มต้นที่สร้างขึ้นเมื่อคุณเริ่มต้นพื้นที่เก็บข้อมูล git (เช่นgit init)

คุณสามารถลบmasterสาขา (เช่นgit branch -D master) คุณไม่สามารถลบHEADตัวชี้


6
" HEADเป็นตัวชี้ / ป้ายกำกับการกระทำล่าสุดของสาขาที่คุณเปิดอยู่" ฉันคิดว่านี่เป็นสิ่งที่ทำให้เข้าใจผิดได้ดีที่สุด หากคุณชำระเงินการกระทำที่เก่ากว่าตอนนี้ HEAD จะกลายเป็นตัวชี้ไปยังการกระทำที่เก่ากว่าไม่ใช่การกระทำล่าสุด ขวา?
LarsH

2
คุณถูก. HEAD คือการชำระเงินล่าสุดของคุณ แต่ในการป้องกันของฉันสำหรับ Git checkoutคำสั่งนั้นเทียบเท่ากับการสลับสาขาในระบบ SCM ทั่วไปอื่น ๆ
benhorgen

1
ฉันเห็นอกเห็นใจ ... ฉันสามารถทำผิดพลาดได้ง่าย ๆ เหตุผลเดียวที่ฉันสังเกตคือเพราะฉันอยู่ในขั้นตอนของการพยายามค้นคว้าว่า HEAD หมายถึงอะไรจริงๆ โอกาสใดที่คุณสามารถแก้ไขคำตอบของคุณให้ถูกต้องได้? ฉันคิดว่า HEAD เป็นแนวคิดที่ยากที่จะหาคำอธิบายที่ถูกต้องสำหรับผู้ที่ไม่ใช่ผู้เชี่ยวชาญเช่นฉัน และการมีคำแนะนำนั่งอยู่ตรงนั้นบนเว็บที่ให้ข้อมูลที่ไม่ถูกต้องเกี่ยวกับ HEAD ทำให้มันค่อนข้างยากขึ้น
LarsH

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

4
เทคนิค แต่ถ้าคุณตรวจสอบการกระทำที่เก่ากว่าคุณจะไม่ 'เปิด' สาขาอีกต่อไป หากคุณชำระเงินการยืนยันแทนที่จะเป็นสาขาคุณมีสิ่งที่เรียกว่า "HEAD HEAD" คุณจะไม่ 'อยู่ในสาขา' อีกต่อไป การเป็น 'บนสาขา' หมายถึงหัวหน้าของคุณกำลังอ้างถึงสาขาและตามคำนิยามคุณอยู่ในการกระทำล่าสุดของสาขานั้น เพียงเพราะคุณได้ทำสัญญา 'b54fe7' แล้วและคะแนนหลักของการกระทำนั้นไม่ได้หมายความว่าคุณอยู่ในสาขาหลัก อาจมีหลายสาขาที่ชี้ไปที่การกระทำแบบเดียวกันคุณกำลัง 'เปิด' สาขาที่ HEAD ชี้ไปถ้ามี
Jason Goemaat

8

เพียงแค่ผลักดันการเปลี่ยนแปลงของสาขาปัจจุบันของคุณ

git push origin

และจะผลักดันให้สาขาของคุณ ' B' การเปลี่ยนแปลง ' origin/B'
ถ้าคุณอยู่ในของคุณสาขาคอมไพล์จะผลักดันไปmaster จริงๆแล้วมันจะผลักดันการเปลี่ยนแปลงทั้งหมดบนกิ่งไม้ในท้องถิ่นที่ได้ตรงกับสาขาที่ห่างไกล มันจะถูกควบคุมโดยการตั้งค่าคอนฟิกpush.default ดูยังผลักดัน RefSpecs ในหนังสือเล่มorigin/master
origin


สิ่งที่คุณเห็นเป็นแถบด้านข้างที่เป็นตัวแทนของ refspecs ทั้งหมดของธุรกรรมซื้อคืนระยะไกลของคุณในส้อมทดลอง GitXของโครงการ GitX

ข้อความแสดงแทน

HEADจะกำหนดให้สาขาเริ่มต้นสำหรับระยะไกลที่
ดูgit remote set-headหน้าคน :

ไม่จำเป็นต้องมีสาขาเริ่มต้นสำหรับรีโมต แต่อนุญาตให้ระบุชื่อของรีโมตแทนการระบุของสาขาที่ระบุ
ตัวอย่างเช่นถ้าสาขาเริ่มต้นสำหรับoriginการตั้งค่าการmasterแล้วอาจจะระบุทุกที่ที่คุณจะได้ตามปกติระบุoriginorigin/master

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