บางคำสั่ง Git ใช้กระทำช่วงหนึ่งและไวยากรณ์ที่ถูกต้องคือการแยกสองกระทำชื่อที่มีจุดสองจุดและไวยากรณ์อื่นใช้จุดสามจุด..
...
ความแตกต่างระหว่างสองคืออะไร
บางคำสั่ง Git ใช้กระทำช่วงหนึ่งและไวยากรณ์ที่ถูกต้องคือการแยกสองกระทำชื่อที่มีจุดสองจุดและไวยากรณ์อื่นใช้จุดสามจุด..
...
ความแตกต่างระหว่างสองคืออะไร
คำตอบ:
ขึ้นอยู่กับว่าคุณกำลังใช้log
คำสั่งหรือdiff
คำสั่ง ในlog
กรณีที่อยู่ในman git-rev-parse
เอกสารประกอบ:
ในการแยกการคอมมิทที่เข้าถึงได้จากการคอมมิตจะมีการใช้เครื่องหมายคำนำหน้า ^ เช่น ^ r1 r2 หมายถึงกระทำการเข้าถึงได้จาก r2 แต่ไม่รวมสิ่งที่เข้าถึงได้จาก r1
การดำเนินการของชุดนี้ปรากฏขึ้นบ่อยครั้งจนมีชวเลข เมื่อคุณมีสองคอมมิท r1 และ r2 (ตั้งชื่อตามซินดิเคทที่อธิบายไว้ใน REVISIONS REVISIONS ด้านบน) คุณสามารถขอคอมมิทที่เข้าถึงได้จาก r2 ยกเว้นที่สามารถเข้าถึงได้จาก r1 โดย "^ r1 r2" และสามารถเขียนเป็น "r1..r2"
สัญกรณ์ที่คล้ายกัน "r1 ... r2" เรียกว่าความแตกต่างสมมาตรของ r1 และ r2 และถูกกำหนดเป็น "r1 r2 - ไม่ $ (git ผสานฐาน - ทั้งหมด r1 r2)" มันเป็นชุดของการกระทำที่สามารถเข้าถึงได้จากอย่างใดอย่างหนึ่งของ r1 หรือ r2 แต่ไม่ได้มาจากทั้งสอง
ซึ่งโดยทั่วไปหมายความว่าคุณจะได้รับการกระทำทั้งหมดที่อยู่ในทั้งสองสาขา แต่ไม่ใช่ในทั้งสอง
ในdiff
กรณีที่อยู่ในman git-diff
เอกสารประกอบ:
git diff [--options] <commit>...<commit> [--] [<path>...] This form is to view the changes on the branch containing and up to the second <commit>, starting at a common ancestor of both <commit>. "git diff A...B" is equivalent to "git diff $(git-merge-base A B) B". You can omit any one of <commit>, which has the same effect as using HEAD instead.
ซึ่งค่อนข้างเลือน โดยทั่วไปหมายถึงมันแสดงให้เห็นถึงความแตกต่างในสาขานั้นเมื่อเปรียบเทียบกับสาขาอื่น: มันจะมองหาคอมมิชชันล่าสุดที่มีคอมมิชชันแรกที่คุณให้ไว้และจากนั้นก็คอมมิชชันที่สองที่แตกต่าง เป็นวิธีง่ายๆในการดูว่ามีการเปลี่ยนแปลงอะไรในสาขานั้นเปรียบเทียบกับสาขานี้โดยไม่ต้องแจ้งให้ทราบการเปลี่ยนแปลงในสาขานี้เท่านั้น
สิ่งที่..
ค่อนข้างง่ายกว่า: ในgit-diff
กรณีนี้มันเหมือนกับ a git diff A B
และเพิ่งแตกต่างกับ A ในlog
กรณีที่มันแสดงการกระทำทั้งหมดที่อยู่ใน B แต่ไม่ใช่ใน A
..
และ...
สลับตรงสำหรับ log และ diff: log A..B
เปลี่ยนจากผสานฐานเป็น B ซึ่งเป็นสิ่งที่diff A...B
ทำ
git diff
ผมขอแนะนำที่จะไม่ใช้เครื่องหมายจุดสำหรับ
A...B
== A..B + B..A
?
git log
สิ่งนี้แน่นอนใช่
เมื่อคุณใช้ช่วงคอมมิชชันที่ชอบ..
และ...
ด้วยgit log
ความแตกต่างระหว่างพวกมันคือสำหรับสาขา A และ B
git log A..B
จะแสดงให้คุณเห็นถึงความมุ่งมั่นทั้งหมดที่ B ไม่มีที่ Aในขณะนั้น
git log A...B
จะแสดงให้คุณเห็นทั้งข้อผูกพันที่ A มีและ B ไม่มีและการกระทำที่ B ไม่มี A หรือในคำอื่น ๆก็จะกรองการกระทำทั้งหมดที่ทั้ง A และ B ใช้ร่วมกัน ดังนั้นจะแสดงเฉพาะการกระทำที่พวกเขาไม่ได้แบ่งปันกัน
git log A..B
นี่คือการแสดงออกของ คอมมิชชันที่สาขา B มีที่ไม่มีอยู่ใน A คือสิ่งที่ถูกส่งคืนโดยช่วงการส่งข้อมูลและถูกไฮไลต์ด้วยสีแดงในแผนภาพ Venn และวงกลมสีน้ำเงินในแผนผังการส่งข้อมูล:
git log A...B
เหล่านี้เป็นแผนภาพสำหรับ โปรดสังเกตว่าคำสั่งที่แบ่งใช้โดยสาขาทั้งสองจะไม่ถูกส่งคืนโดยคำสั่ง:
...
มีประโยชน์มากขึ้นคุณสามารถทำให้ช่วงการมอบหมายสามจุด...
มีประโยชน์มากขึ้นในคำสั่งบันทึกโดยใช้--left-right
ตัวเลือกเพื่อแสดงการกระทำที่เป็นของสาขาใด:
$ git log --oneline --decorate --left-right --graph master...origin/master
< 1794bee (HEAD, master) Derp some more
> 6e6ce69 (origin/master, origin/HEAD) Add hello.txt
ในการส่งออกดังกล่าวข้างต้นคุณจะเห็นกระทำที่เป็นmaster
จะมีคำนำหน้า<
ในขณะที่กระทำที่เป็นจะมีคำนำหน้าorigin/master
>
สักวันหนึ่งฉันอาจเพิ่มคำอธิบายของตัวเองสำหรับวิธีการทำงานของช่วงคอมมิตgit diff
แต่สำหรับตอนนี้คุณอาจต้องการตรวจสอบความแตกต่างระหว่าง double-dot ".. " และ "dot-dot" ... "ใน Git diff commit คืออะไร ช่วง? .