คุณเห็นเอกสาร Git ที่พูดถึงสิ่งต่างๆ
สาขาจะต้องรวมกันใน HEAD
แต่ Git คืออะไรHEAD
กันแน่
คุณเห็นเอกสาร Git ที่พูดถึงสิ่งต่างๆ
สาขาจะต้องรวมกันใน HEAD
แต่ Git คืออะไรHEAD
กันแน่
คำตอบ:
คุณคิดว่า HEAD เป็น "สาขาปัจจุบัน" เมื่อคุณสลับสาขาด้วยgit checkout
การแก้ไข HEAD จะเปลี่ยนไปชี้ไปที่ปลายของสาขาใหม่
คุณสามารถดูว่า HEAD ชี้ไปที่ใดโดยทำดังนี้
cat .git/HEAD
ในกรณีของฉันผลลัพธ์คือ:
$ cat .git/HEAD
ref: refs/heads/master
เป็นไปได้ที่ HEAD จะอ้างถึงการแก้ไขเฉพาะที่ไม่เกี่ยวข้องกับชื่อสาขา สถานการณ์เช่นนี้จะเรียกว่าหัวเดี่ยว
ในการอ้างถึงคนอื่น :
หัวเป็นเพียงการอ้างอิงถึงวัตถุกระทำ แต่ละหัวมีชื่อ (ชื่อสาขาหรือชื่อแท็ก ฯลฯ ) ตามค่าเริ่มต้นจะมีส่วนหัวในที่เก็บข้อมูลทั้งหมดที่เรียกว่าต้นแบบ พื้นที่เก็บข้อมูลสามารถมีจำนวนของหัวใด ๆ เมื่อถึงเวลาใดเวลาหนึ่งหัวจะถูกเลือกเป็น "หัวปัจจุบัน" หัวนี้มีนามแฝงต่อ HEAD อยู่ในเมืองหลวงเสมอ "
โปรดสังเกตความแตกต่างนี้: "หัว" (ตัวพิมพ์เล็ก) หมายถึงหนึ่งในหัวที่มีชื่อในที่เก็บ; “ HEAD” (ตัวพิมพ์ใหญ่) อ้างถึงส่วนหัวที่ใช้งานอยู่ในปัจจุบันเท่านั้น ความแตกต่างนี้ถูกใช้บ่อยในเอกสารประกอบ Git
แหล่งอื่นที่ดีที่ได้อย่างรวดเร็วครอบคลุมการทำงานภายในของคอมไพล์ (และดังนั้นความเข้าใจที่ดีของหัว / HEAD) สามารถพบได้ที่นี่ การอ้างอิง (การอ้างอิง :) หรือหัวหรือกิ่งถือได้ว่าเป็นบันทึกโพสต์มันติดอยู่กับความมุ่งมั่นในประวัติการกระทำ โดยปกติแล้วพวกเขาจะชี้ไปที่ปลายของชุดของความมุ่งมั่น แต่พวกเขาสามารถย้ายไปรอบ ๆ ด้วยgit checkout
หรือgit reset
อื่น ๆ
git checkout HEAD~2
) ซึ่งไม่ได้เป็นรหัสการกระทำของหัวที่รู้จักกัน ดูบทความที่eagain.net/articles/git-for-computer-scientistsสำหรับคำอธิบายที่ละเอียดยิ่งขึ้น
git revert
ไม่ใช่ตัวอย่างที่ดีของการย้ายสาขาที่ไม่ได้อยู่ที่ปลายเพราะgit revert
เพิ่งสร้างการกระทำใหม่และยังคงออกจากสาขาปัจจุบันที่เคล็ดลับ (ใหม่)
commit
s reset
ฯลฯ s
ฉันแนะนำคำนิยามนี้จากนักพัฒนา Github Scott Chacon [ วิดีโออ้างอิง ]:
Head เป็นสาขาปัจจุบันของคุณ มันคือการอ้างอิงสัญลักษณ์ มันคือการอ้างอิงไปยังสาขา คุณมักจะมี HEAD แต่ HEAD จะชี้ไปยังหนึ่งในพอยน์เตอร์อื่น ๆ เหล่านี้ไปยังหนึ่งในสาขาที่คุณอยู่ มันเป็นพ่อแม่ของการกระทำของคุณต่อไป นี่คือสิ่งที่ควรตรวจสอบล่าสุดในไดเรกทอรีการทำงานของคุณ ... นี่คือสถานะล่าสุดที่ทราบว่าไดเรกทอรีการทำงานของคุณคืออะไร
วิดีโอทั้งหมดจะให้คำแนะนำที่เป็นธรรมกับระบบคอมไพล์ทั้งหมดดังนั้นฉันขอแนะนำให้คุณดูมันทั้งหมดหากมีเวลา
HEAD เป็นเพียงตัวชี้พิเศษที่ชี้ไปยังสาขาท้องถิ่นที่คุณอยู่
จากหนังสือPro Gitบทที่3.1 การแยกกิ่ง Git - สาขาโดยสังเขปในส่วนการสร้างสาขาใหม่ :
จะเกิดอะไรขึ้นถ้าคุณสร้างสาขาใหม่ การทำเช่นนั้นจะสร้างตัวชี้ใหม่เพื่อให้คุณเลื่อนไปรอบ ๆ สมมติว่าคุณสร้างสาขาใหม่ที่เรียกว่าการทดสอบ คุณทำสิ่งนี้ด้วยคำสั่ง git branch:
$ git branch testing
สิ่งนี้จะสร้างตัวชี้ใหม่พร้อมกันกับการกระทำที่คุณกำลังทำอยู่
Git รู้ได้อย่างไรว่าสาขาไหนที่คุณเปิดอยู่ มันเก็บตัวชี้พิเศษที่เรียกว่า HEAD โปรดทราบว่านี่แตกต่างจากแนวคิดของ HEAD ใน VCS อื่น ๆ ที่คุณอาจคุ้นเคยเช่น Subversion หรือ CVS ใน Git นี่คือตัวชี้ไปยังสาขาท้องถิ่นที่คุณอยู่ ในกรณีนี้คุณยังคงอยู่ในระดับปริญญาโท คำสั่ง git branch สร้างสาขาใหม่เท่านั้น - มันไม่ได้เปลี่ยนเป็นสาขานั้น
34ac2
ในตัวอย่างด้านบนตอนนี้ HEAD จะชี้ไปที่การคอมมิทและเรียกว่า HEAD ที่แยกออกมา ในสถานะนี้คุณสามารถทำการเปลี่ยนแปลงทดลองและกระทำการเปลี่ยนแปลงได้เช่นกัน แต่เมื่อคุณชำระเงินที่สาขาอื่นคุณจะสูญเสียการเปลี่ยนแปลงทั้งหมดยกเว้นว่าคุณสร้างสาขาใหม่
git log
และได้สิ่งที่ต้องการcommit ad0265... HEAD -> foo ...
ที่จะหมายถึงfoo
สาขาคือการอ้างอิงถึงการกระทำ ad0265
ID การทำเช็คเอาต์ของการอ้างอิงข้อความfoo
ไม่ใช่หัวเดี่ยว การชำระเงินการยืนยันรหัสad0265
จะส่งผลให้หัวที่ถอดออก อาจเป็นเพราะฉันขาดความลึกซึ้งในสิ่งที่คุณกำลังสื่อสาร ฉันหวังว่ากำแพงข้อความนี้จะช่วยค้นหาว่าฉันหลงทางไหน
สมมติว่าไม่ใช่กรณีพิเศษที่เรียกว่า "HEAD HEAD" จากนั้นตามที่ระบุไว้ในหนังสือ O'Reilly Git, 2nd edtion, p.69 HEAD
หมายถึง:
HEAD
อ้างถึงการกระทำล่าสุดในสาขาปัจจุบันเสมอ เมื่อคุณเปลี่ยนสาขาHEAD
จะได้รับการอัปเดตเพื่ออ้างอิงการกระทำล่าสุดของสาขาใหม่
ดังนั้น
HEAD
คือว่า "เคล็ดลับ" ของสาขาในปัจจุบัน
โปรดทราบว่าเราสามารถใช้HEAD
เพื่ออ้างถึงการคอมมิชชันล่าสุดและใช้HEAD~
เป็นการคอมมิตก่อนทิปและHEAD~~
หรือHEAD~2
เป็นคอมมิทแม้แต่ก่อนหน้าและอื่น ๆ
อาจมีความเข้าใจผิดที่สำคัญ แต่สำคัญในจำนวนคำตอบเหล่านี้ ฉันคิดว่าฉันจะเพิ่มคำตอบเพื่อล้างมัน
คือ
HEAD
อะไร
HEAD
เป็นข้อมูลอ้างอิงเชิงสัญลักษณ์ที่ชี้ไปยังที่ใดก็ตามที่คุณอยู่ในประวัติการกระทำของคุณ มันติดตามคุณทุกที่ที่คุณไปไม่ว่าคุณจะทำอะไรเหมือนเงา หากคุณกระทำHEAD
จะย้าย หากคุณชำระเงินบางอย่างHEAD
จะย้าย ไม่ว่าคุณจะทำอะไรถ้าคุณย้ายที่ใดที่หนึ่งใหม่ในประวัติความเป็นมาของHEAD
คุณ ไปยังที่อยู่ความเข้าใจผิดอย่างใดอย่างหนึ่งที่เหมือนกัน: HEAD
คุณไม่สามารถแยกตัวเองจาก นั่นไม่ใช่สถานะ HEAD ที่แยกออกมา ถ้าคุณคิดว่าตัวเองเคยคิดว่า: "โอ้ไม่ฉันอยู่ในสถานะ HEAD เดี่ยว! ฉันทำ HEAD หาย!" จำไว้ว่ามันเป็นหัวหน้าของคุณ หัวคือคุณ คุณไม่ได้แยกออกจาก HEAD คุณและ HEAD ของคุณได้แยกออกจากสิ่งอื่นแล้ว
HEAD
สามารถชี้ไปที่การตกลงใช่ แต่โดยทั่วไปแล้วจะไม่ ให้ฉันพูดอีกครั้ง โดยทั่วไปแล้วHEAD
ไม่ได้ชี้ไปที่การกระทำ มันชี้ไปที่การอ้างอิงสาขา มันถูกแนบไปยังสาขาที่และเมื่อคุณทำบางสิ่งบางอย่าง (เช่นcommit
หรือreset
) HEAD
สาขาที่แนบมาจะย้ายไปพร้อมกับ คุณสามารถเห็นสิ่งที่ชี้ไปโดยดูใต้ฝากระโปรง
cat .git/HEAD
โดยปกติคุณจะได้รับสิ่งนี้:
ref: refs/heads/master
บางครั้งคุณจะได้รับสิ่งนี้:
a3c485d9688e3c6bc14b06ca1529f0e78edd3f86
นั่นคือสิ่งที่จะเกิดขึ้นเมื่อHEAD
ชี้ไปที่การส่งโดยตรง สิ่งนี้เรียกว่า HEAD เดี่ยวเนื่องจากHEAD
ชี้ไปที่สิ่งอื่นนอกเหนือจากการอ้างอิงสาขา หากคุณกระทำในสถานะนี้จะmaster
ไม่ถูกผูกติดกับHEAD
อีกต่อไปจะไม่ย้ายไปกับคุณอีกต่อไป มันไม่สำคัญว่าจะทำอะไร คุณอาจใช้การกระทำเดียวกับสาขาหลักของคุณ แต่ถ้าHEAD
ชี้ไปที่การส่งมอบมากกว่าสาขาจะเป็นการแยกออกและการส่งมอบใหม่จะไม่เชื่อมโยงกับการอ้างอิงสาขา
คุณสามารถดูกราฟนี้ถ้าคุณลองออกกำลังกายต่อไปนี้ จากที่เก็บ git ให้รันสิ่งนี้ คุณจะได้อะไรที่แตกต่างออกไปเล็กน้อย แต่พวกมันจะอยู่ตรงนั้น เมื่อถึงเวลาชำระเงินการกระทำโดยตรงเพียงใช้แฮชตัวย่อที่คุณได้รับจากเอาต์พุตแรก (นี่คือa3c485d
)
git checkout master
git log --pretty=format:"%h: %d" -1
# a3c485d: (HEAD -> master)
git checkout a3c485d -q # (-q is for dramatic effect)
git log --pretty=format:"%h: %d" -1
# a3c485d: (HEAD, master)
ตกลงดังนั้นจึงมีความแตกต่างเล็กน้อยในผลลัพธ์ที่นี่ การตรวจสอบการกระทำโดยตรง (แทนสาขา) ทำให้เรามีเครื่องหมายจุลภาคแทนลูกศร คุณคิดว่าเราอยู่ในสถานะ HEAD เดี่ยวหรือไม่? HEAD ยังคงหมายถึงการแก้ไขเฉพาะที่เกี่ยวข้องกับชื่อสาขา เรายังคงอยู่ในสาขาหลักใช่ไหม
ตอนนี้ลอง:
git status
# HEAD detached at a3c485d
Nope เราอยู่ในสถานะ 'ถอดหัว'
คุณสามารถเห็นการเป็นตัวแทนของ(HEAD -> branch)
vs. (HEAD, branch)
ด้วยgit log -1
เหมือนกัน
HEAD
คือคุณ. มันจะชี้ไปที่สิ่งที่คุณเช็คเอาต์ไม่ว่าคุณจะอยู่ที่ไหน โดยทั่วไปแล้วจะไม่กระทำมันเป็นสาขา ถ้าHEAD
ไม่ชี้ไปที่กระทำ (หรือแท็ก) ถึงแม้ว่ามันจะเหมือนกันกระทำ (หรือแท็ก) ที่สาขายังชี้ไปที่คุณ (และHEAD
) ได้รับการถอดออกจากสาขาที่ เนื่องจากคุณไม่มีสาขาที่แนบมากับคุณสาขาจะไม่ติดตามคุณไปพร้อม ๆ กับที่คุณทำคอมมิชชันใหม่ HEAD
อย่างไรก็ตามจะ
.git/HEAD
เป็นสิ่งที่ซอฟต์แวร์พิจารณาแล้วว่าเป็น HEAD
HEAD
อ้างถึงการกระทำปัจจุบันที่สำเนาการทำงานของคุณชี้ไปที่นั่นคือการกระทำที่คุณได้ชำระเงิน จากเอกสารเคอร์เนล Linux Kernel อย่างเป็นทางการเกี่ยวกับการระบุการแก้ไข Git :
HEAD
ชื่อการกระทำที่คุณยึดตามการเปลี่ยนแปลงในแผนผังการทำงาน
อย่างไรก็ตามโปรดทราบว่าใน Git รุ่น 1.8.4 ที่กำลังจะมา@
นั้นยังสามารถใช้เป็นชวเลขได้HEAD
ตามที่บันทึกไว้โดยผู้ร่วมสนับสนุน Git Junio C Hamano ในบล็อก Git Blame ของเขา :
แทนที่จะพิมพ์ "HEAD" คุณสามารถพูดว่า "@" แทนเช่น "git log @"
กองมากเกินใช้VonCยังพบว่าบางข้อมูลที่น่าสนใจเกี่ยวกับเหตุผลที่@
ได้รับเลือกเป็นชวเลขในคำตอบของเขาไปยังคำถามอื่น
นอกจากนี้ที่น่าสนใจในบางสภาพแวดล้อมไม่จำเป็นต้องใช้ประโยชน์HEAD
โดยเฉพาะในระบบปฏิบัติการที่ใช้ระบบไฟล์แบบไม่คำนึงถึงขนาดตัวพิมพ์โดยเฉพาะ Windows และ OS X
ลองดูที่การสร้างและเล่นกับสาขา
HEAD เป็นไฟล์ที่เนื้อหากำหนดตำแหน่งที่ตัวแปร HEAD อ้างถึง:
$ cat .git/HEAD
ref: refs/heads/master
$ cat .git/refs/heads/master
35ede5c916f88d8ba5a9dd6afd69fcaf773f70ed
ในพื้นที่เก็บข้อมูลนี้เนื้อหาของแฟ้มหัวหมายถึงไฟล์ที่สองชื่อrefs / หัว / Master ไฟล์refs / heads / masterมีแฮชของการคอมมิทล่าสุดบนกิ่งหลัก
ผลที่ได้คือจุดมุ่งหน้าไปยังสาขาต้นแบบที่กระทำจาก/ refs / หัว / Master .gitไฟล์
ฉันต้องการรายละเอียดเล็ก ๆ น้อย ๆ ในคำตอบที่ได้รับการยอมรับของ Greg Hewgil อ้างอิงจากGit Pocket Guide
สาขา:
สาขาเองถูกกำหนดให้เป็นทุกจุดที่เข้าถึงได้ในกราฟการกระทำจากการกระทำที่มีชื่อ
HEAD: Ref ชนิดพิเศษ
หัวหน้าอ้างอิงพิเศษเป็นตัวกำหนดว่าคุณอยู่ในสาขาใด ...
refs
Git กำหนดการอ้างอิงสองประเภทหรือพอยน์เตอร์ที่มีชื่อซึ่งเรียกว่า“ refs”:
- การอ้างอิงแบบง่ายซึ่งชี้ไปยัง ID วัตถุโดยตรง (โดยปกติจะเป็นการกระทำหรือแท็ก)
- การอ้างอิงเชิงสัญลักษณ์ (หรือ symref) ซึ่งชี้ไปที่การอ้างอิงอื่น (อย่างง่ายหรือเชิงสัญลักษณ์)
ตามที่ Greg พูดถึง HEAD อาจอยู่ใน "สถานะแยกออก" ดังนั้น HEAD สามารถเป็นได้ทั้งการอ้างอิงแบบง่าย (สำหรับ HEAD ที่แยกออก) หรือ symref
ถ้า HEAD เป็นสัญลักษณ์อ้างอิงสำหรับสาขาที่มีอยู่คุณก็จะ "เปิด" สาขานั้น ถ้าในทางกลับกัน HEAD คือการอ้างอิงที่เรียบง่ายตั้งชื่อการกระทำโดยตรงโดย SHA-1 ID ของคุณคุณจะไม่ได้ "เปิด" สาขาใด ๆ แต่จะอยู่ในโหมด "ถอดหัว" ซึ่งจะเกิดขึ้นเมื่อคุณตรวจสอบก่อนหน้านี้ มุ่งมั่นที่จะตรวจสอบ
ฉันคิดว่า 'HEAD' เป็นสิ่งที่ต้องทำในปัจจุบัน กล่าวอีกนัยหนึ่ง 'หัว' ชี้ไปที่การกระทำที่มีการตรวจสอบในปัจจุบัน
หากคุณเพิ่งโคลนและไม่ได้เช็คเอาท์ฉันไม่รู้ว่ามันชี้ไปยังอะไรอาจเป็นตำแหน่งที่ไม่ถูกต้อง
master
สาขา - ดังนั้น HEAD จะชี้ไปที่มาสเตอร์
master
แต่ไม่เสมอไป ดูremote set-head
remote set-head
ซึ่งมีผลกับสาขาเริ่มต้นในเครื่องเท่านั้นและจะไม่เปลี่ยนค่าเริ่มต้นที่เซิร์ฟเวอร์
มุ่งหน้าไปที่ส่วนปลายของสาขาที่เช็คเอาท์ในปัจจุบัน
ในที่เก็บของคุณมีโฟลเดอร์. git เปิดไฟล์ในตำแหน่งนี้: .git \ refs \ heads รหัส (SHA-1 กัญชา) ในแฟ้มที่ (ต้นแบบในกรณีส่วนใหญ่) git log
จะเป็นล่าสุดกระทำเช่นหนึ่งที่เห็นในผลลัพธ์ของคำสั่งที่ ข้อมูลเพิ่มเติมเกี่ยวกับโฟลเดอร์. git: http://gitready.com/advanced/2009/03/23/whats-inside-your-git-directory.html
git reset HEAD^
และจากนั้นคอมมิชชันล่าสุด (ปลายเดิม) จะไม่ถูกชี้ไปที่ปลายกิ่งอีกต่อไป
วิธีที่ยอดเยี่ยมในการขับรถกลับบ้านจุดที่ทำไว้ในคำตอบที่ถูกต้องคือการวิ่ง
git reflog HEAD
คุณจะได้รับประวัติศาสตร์ของทุกสถานที่ที่หัวหน้าได้ชี้ไป
หลังจากอ่านคำตอบก่อนหน้าทั้งหมดแล้วฉันยังต้องการความชัดเจนมากขึ้น บล็อกนี้ที่เว็บไซต์ git อย่างเป็นทางการhttp://git-scm.com/blogให้สิ่งที่ฉันต้องการ:
HEAD in Git เป็นตัวชี้ไปยังการอ้างอิงสาขาปัจจุบันซึ่งจะเป็นตัวชี้ไปยังการส่งข้อมูลล่าสุดที่คุณทำหรือการส่งข้อมูลครั้งล่าสุดที่มีการตรวจสอบในไดเรกทอรีการทำงานของคุณ นั่นก็หมายความว่ามันจะเป็นหน้าที่หลักของการกระทำครั้งต่อไปที่คุณทำ โดยทั่วไปจะคิดได้ง่ายที่สุดเนื่องจาก HEAD เป็นภาพรวมของการคอมมิทครั้งล่าสุดของคุณ
HEAD
ไม่ใช่ความมุ่งมั่น; มันชี้ไปที่หนึ่ง
checkout HEAD^
ตอนนี้ HEAD ไม่ได้ชี้ไปที่การสแนปชอตครั้งสุดท้ายในทุกสาขา
commit
, merge
, rebase
, log
ฯลฯ แต่แนวคิดอาจจะ "(ชี้ไป) ตำแหน่งปัจจุบัน" เป็นบทสรุปที่ดี
รู้สึกเหมือนHEAD
เป็นเพียงแท็กสำหรับการส่งมอบครั้งล่าสุดที่คุณเช็คเอาต์
นี่อาจเป็นเคล็ดลับของสาขาเฉพาะ (เช่น "ต้นแบบ") หรือบางส่วนอยู่ระหว่างการกระทำของสาขา ("ถอดหัว")
นอกเหนือจากคำจำกัดความทั้งหมดสิ่งที่ติดอยู่ในใจของฉันคือเมื่อคุณทำการคอมมิชชัน GIT จะสร้างออบเจกต์การคอมมิตภายในที่เก็บ วัตถุ Commit ควรมีพาเรนต์ (หรือหลายพาเรนต์ถ้าเป็นการรวมคอมมิต) ตอนนี้ git รู้จักผู้ปกครองของการกระทำในปัจจุบันอย่างไร ดังนั้น HEAD เป็นตัวชี้ไปยัง (การอ้างอิง) การกระทำล่าสุดซึ่งจะกลายเป็น parent ของการกระทำปัจจุบัน
สองสิ่งนี้อาจทำให้คุณสับสน:
ศีรษะ
ชี้ไปที่การอ้างอิงที่ระบุชื่อสาขาที่ส่งล่าสุด ยกเว้นว่าคุณใช้การอ้างอิงแพ็คเกจมักจะเก็บหัวไว้ใน $ GIT_DIR / refs / heads /
ศีรษะ
สาขาปัจจุบันหรือต้นไม้ทำงานของคุณมักจะถูกสร้างขึ้นจากต้นไม้ HEAD ชี้ไปที่ HEAD จะต้องชี้ไปที่ศีรษะยกเว้นว่าคุณกำลังใช้ HEAD ที่ถอดออกมา
ลองดูที่http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is
รูปที่ 3-5 ไฟล์ HEAD ชี้ไปที่สาขาที่คุณอยู่
สาขาเป็นจริงชี้ที่ถือกระทำ ID เช่น17a5 HEADเป็นตัวชี้ไปยังสาขาที่ผู้ใช้กำลังทำงานอยู่
HEADมี filw อ้างอิงซึ่งมีลักษณะเช่นนี้:
Ref:
คุณสามารถตรวจสอบไฟล์เหล่านี้ได้ด้วยการเข้าถึง .git/HEAD
.git/refs
ที่อยู่ในพื้นที่เก็บข้อมูลที่คุณกำลังทำงาน
Git
เป็นเรื่องของความมุ่งมั่น
และHead
ชี้ไปที่การกระทำที่คุณตรวจสอบในปัจจุบัน
$ git cat-file -t HEAD
commit
เมื่อใดก็ตามที่คุณชำระเงินสาขา HEAD จะชี้ไปที่การกระทำล่าสุดในสาขานั้น เนื้อหาของ HEAD สามารถตรวจสอบได้ดังนี้ (สำหรับสาขาหลัก):
$ cat .git/refs/heads/master
b089141cc8a7d89d606b2f7c15bfdc48640a8e25
ตามแนวคิดหัวคือการแก้ไขล่าสุดในสาขา หากคุณมีมากกว่าหนึ่งหัวต่อสาขาที่มีชื่อคุณอาจสร้างมันขึ้นมาเมื่อทำหน้าที่ในท้องถิ่นโดยไม่ต้องรวมกันสร้างสาขาที่ไม่มีชื่อได้อย่างมีประสิทธิภาพ
เพื่อให้มีพื้นที่เก็บข้อมูลที่ "สะอาด" คุณควรมีหนึ่งหัวต่อสาขาที่มีชื่อและรวมกับสาขาที่มีชื่อทุกครั้งหลังจากที่คุณทำงานในพื้นที่
นี่เป็นความจริงสำหรับMercurialด้วย