อักขระคาเร็ต (^) หมายถึงอะไร?


125

ฉันเห็นคำตอบสำหรับคำถามที่ช่วยกู้คืนไฟล์ที่ถูกลบใน git

วิธีแก้ปัญหาคือ

git checkout <deleting_commit>^ -- <deleted_file_path>

ตัวละครคาเร็ต ( ^) ทำอะไร? ฉันเคยเห็นที่อื่นทำสิ่งที่มีประโยชน์มากในคอมไพล์ มันมีมนต์ขลัง ใครบางคนช่วยทำลายให้ฉันและบอกฉันว่ามันทำอะไร?


9
FYI บน windows: ^ ไม่ทำงานตามที่คาดไว้ใน DOS shell ใช้ git bash shell แล้วใช้งานได้
Cincinnati Joe

5
นั่นไม่ได้เกิดขึ้นกับฉันเมื่อฉันพยายามใช้มัน (เดาว่ามันหมายถึงอะไร) คาเร็ต ( ^) เป็นอักขระหลีกใน cmd.exe ทุกครั้งที่ฉันพยายามใช้มันเพื่อดูว่ามันจะมีประโยชน์หรือไม่ฉันก็ไม่ผ่านอะไรเลยซึ่งอธิบายได้ว่าทำไมผลลัพธ์ถึงไม่แตกต่างกัน > _> cmd.exe โง่ คุณสามารถหลบหนีได้โดยการเพิ่มเป็นสองเท่าหรืออ้างถึง: git log master^^หรือgit log "master^"
แบมแบม

คำตอบ:


138

HEAD^ หมายถึงผู้ปกครองคนแรกของส่วนปลายของสาขาปัจจุบัน

โปรดจำไว้ว่าการคอมไพล์คอมมิตสามารถมีผู้ปกครองได้มากกว่าหนึ่งคน HEAD^เป็นคำย่อHEAD^1และคุณยังสามารถจัดการHEAD^2และอื่น ๆ ได้ตามความเหมาะสม

HEADคุณจะได้รับไปยังผู้ปกครองใดกระทำไม่ได้เป็นเพียง คุณยังสามารถย้อนกลับไปหลายชั่วอายุคนได้เช่นmaster~2หมายถึงปู่ย่าตายายของปลายสาขาหลักซึ่งชอบผู้ปกครองคนแรกในกรณีที่มีความคลุมเครือ specifiers เหล่านี้สามารถถูกล่ามโซ่พลเช่นtopic~3^2 , ดูคำตอบที่เกี่ยวข้องกับสิ่งที่แตกต่างระหว่างHEAD^และHEAD~ใน Git?

สำหรับรายละเอียดโปรดดูที่“การระบุการแก้ไข”git rev-parse --helpส่วนหนึ่งของ


1
แต่แล้วในประวัติศาสตร์เชิงเส้นเหตุใดจึงHEAD^^^ส่งคืนการกระทำที่เก่ากว่าที่สามคือมันเทียบเท่ากับHEAD~~~?
Vorac

1
@Vorac สำหรับประวัติเชิงเส้นใช่
Greg Bacon

21

หมายความว่า "ผู้ปกครองของ" ดังนั้นHEAD^หมายถึง "ผู้ปกครองของ HEAD ปัจจุบัน" คุณสามารถเชื่อมโยงเข้าด้วยกัน: HEAD^^หมายถึง "ผู้ปกครองของผู้ปกครองของ HEAD ปัจจุบัน" (กล่าวคือปู่ย่าตายายของ HEAD ปัจจุบัน) HEAD^^^หมายถึง "ผู้ปกครองของผู้ปกครองของผู้ปกครองของ HEAD ปัจจุบัน" และอื่น ๆ


16

^(ลูกศร) นอกจากนี้ยังสามารถนำมาใช้เมื่อระบุช่วง

ในการแยกคอมมิตที่เข้าถึงได้จากคอมมิตจะใช้สัญกรณ์นำหน้า ^ เช่น ^ r1 r2 หมายถึงคอมมิตที่เข้าถึงได้จาก r2 แต่ไม่รวมสิ่งที่เข้าถึงได้จาก r1

<รอบ>

รวมการกระทำที่เข้าถึงได้จาก (เช่นบรรพบุรุษของ)

^ <รอบ>

ยกเว้นการกระทำที่เข้าถึงได้จาก (เช่นบรรพบุรุษของ)


10

นี่คือคำอธิบายภาพ สมมติว่าคุณมีประวัติดังนี้:

                      master  
  ... <- B <- C <- D
             /
... <- E <- F
              feature

เมื่อคุณสมบัติถูกรวมเข้ากับมาสเตอร์Cถูกสร้างขึ้นด้วยบรรพบุรุษสองคน Git กำหนดหมายเลขบรรพบุรุษเหล่านี้ บรรพบุรุษของเมนไลน์Bถูกกำหนด 1 และบรรพบุรุษคุณลักษณะFถูกกำหนด 2

จึงC^1หมายถึงBและหมายถึงC^2 เป็นนามแฝงสำหรับFC^C^1

<rev>^3คุณจะเท่านั้นที่เคยใช้ หากคุณได้ทำการรวมสามสาขา


7

คาเร็ตหมายถึงพาเรนต์ของคอมมิตเฉพาะ เช่นHEAD^หมายถึงพาเรนต์ของ HEAD commmit ปัจจุบัน (ยังHEAD^^หมายถึงปู่ย่าตายาย)




1

Greg Bacon ให้ลิงค์ที่ดี แต่มันค่อนข้างหนาแน่น เอกสารแนะนำ Git ออนไลน์ยังแนะนำการแก้ไขและตัวระบุช่วง:

https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection


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