Git เปรียบเทียบสองสาขา

Git Compare Two Branches



ระบบควบคุมเวอร์ชันเกือบทั้งหมดมีตัวเลือกการแตกแขนง แต่ Git เป็นที่รู้จักในด้านความสามารถในการแตกแขนงที่รวดเร็ว กิ่งก้านของ Git นั้นมีน้ำหนักเบา ดังนั้นบทลงโทษด้านประสิทธิภาพสำหรับการแตกสาขาจึงน้อยมาก และเราสนับสนุนให้ทีมพัฒนาสาขาและรวมเข้าด้วยกันให้มากที่สุด แต่เมื่อคุณทำงานกับหลายสาขา สิ่งสำคัญคือต้องสามารถเปรียบเทียบและเปรียบเทียบความแตกต่างได้ ในบทช่วยสอนนี้ เราจะพูดถึงเวิร์กโฟลว์เพื่อดูว่าเราสามารถเปรียบเทียบสาขาและคอมมิตต่างๆ ได้อย่างไร เรามาตั้งค่าสถานการณ์ต่อไปนี้กันก่อน:

C00 => C01 => C03 => C06 (มาสเตอร์)









C02 => C04 => C05 (กำลังพัฒนา)



มีการดำเนินการตามขั้นตอนต่อไปนี้:





  • C00: เพิ่ม hello_world.py (สาขาหลัก)
  • — สร้างสาขาการพัฒนา
  • C01: แก้ไข hello_world.py เพื่อเพิ่มสวัสดีที่สอง (สาขาหลัก)
  • C02: แก้ไข hello_world.py เพื่อเพิ่มสาขาการพัฒนาพูดว่าสวัสดี (สาขาการพัฒนา)
  • C03: เพิ่ม readme.txt (สาขาหลัก)
  • C04: แก้ไข hello_world.py เพื่อเพิ่มสาขาการพัฒนาพูดว่าสวัสดีอีกครั้ง (สาขาการพัฒนา)
  • C05: เพิ่ม info.txt (สาขาการพัฒนา)
  • C06: แก้ไข readme.txt เพื่อเพิ่มบรรทัดที่สอง (สาขาหลัก)

หลังจากคอมมิตทั้งหมดแล้ว แบรนช์ 'มาสเตอร์' จะมีไฟล์ดังต่อไปนี้:

hello_world.py
readme.txt



และสาขา 'การพัฒนา' มีไฟล์ต่อไปนี้:

hello_world.py
info.txt


เทียบหัวสองกิ่ง

คุณสามารถใช้ชื่อของกิ่งเพื่อเปรียบเทียบหัวของสองกิ่ง:

$git diffปรมาจารย์..การพัฒนา

แตกต่าง --ไปถึง/สวัสดี_world.py b/hello_world.py
ดัชนี e27f806..3899ed3100644
---ถึง/hello_world.py
+++ ข/hello_world.py
@@-2,7+2,7 @@

def หลัก():
พิมพ์('สวัสดีครั้งแรก!')
- พิมพ์('สวัสดีครั้งที่สอง!')
-
+ พิมพ์('สาขาพัฒนากล่าวสวัสดี')
+ พิมพ์('สาขาพัฒนากล่าวสวัสดีอีกครั้ง')
ถ้า__name__ =='__หลัก__':
หลัก()
แตกต่าง --ไปถึง/info.txt ข/info.txt
ใหม่ไฟล์โหมด100644
ดัชนี 0000000..0ab52fd
--- /dev/โมฆะ
+++ ข/info.txt
@@-0,0+1 @@
+ข้อมูลใหม่
แตกต่าง --ไปถึง/readme.txt ข/readme.txt
ลบแล้วไฟล์โหมด100644
ดัชนี e29c296..000000
---ถึง/readme.txt
+++/dev/โมฆะ
@@-1,2+0,0 @@
-1บรรทัดแรกของ readme.txt
-2บรรทัดที่สองของ readme.txt

คำสั่ง diff จะตรวจสอบการเปลี่ยนแปลงซ้ำๆ มีการเรียกใช้ส่วนต่างต่อไปนี้:

diff –git a/hello_world.py b/hello_world.py
diff –git a/info.txt b/info.txt
diff –git a/readme.txt b/readme.txt

โดยที่ 'a' หมายถึงสาขา 'master' และ 'b' หมายถึงสาขาการพัฒนา 'a' ถูกกำหนดให้กับพารามิเตอร์ตัวแรกและ 'b' ให้กับพารามิเตอร์ที่สองเสมอ /dev/null หมายความว่าสาขาไม่มีไฟล์


การเปรียบเทียบระหว่างคอมมิชชัน

ในตัวอย่างของเรา สาขา 'มาสเตอร์' มีคอมมิตดังต่อไปนี้:

$สถานะ git
บนต้นแบบสาขา
ไม่มีอะไรจะคอมมิต ไดเร็กทอรีทำงาน clean

$git log --oneline
caa0ddd C06: แก้ไข readme.txt เพื่อเพิ่มบรรทัดที่สอง(สาขาหลัก)
efaba94 C03: เพิ่ม readme.txt(สาขาหลัก)
ee60eac C01: แก้ไข hello_world.py เพื่อเพิ่มสวัสดีครั้งที่สอง(สาขาหลัก)
22b4bf9 C00: เพิ่มแล้ว hello_world.py(สาขาหลัก)

สาขาการพัฒนามีภาระผูกพันดังต่อไปนี้:

$สถานะ git
ในการพัฒนาสาขา
ไม่มีอะไรจะคอมมิต ไดเร็กทอรีทำงาน clean

$git log --oneline
df3a4ee C05: เพิ่ม info.txt(สาขาพัฒนา)
0f0abb8 C04: แก้ไข hello_world.py เพื่อเพิ่มสาขาการพัฒนาพูดว่าสวัสดีอีกครั้ง(สาขาพัฒนา)
3f611a0 C02: แก้ไข hello_world.py เพื่อเพิ่มสาขาการพัฒนาพูดว่าสวัสดี(สาขาพัฒนา)
22b4bf9 C00: เพิ่มแล้ว hello_world.py(สาขาหลัก)

สมมติว่าเราต้องการเปรียบเทียบ hello_world.py สำหรับการคอมมิต C01 และ C02 คุณสามารถใช้แฮชเพื่อเปรียบเทียบ:

$git diffee60eac:hello_world.py 3f611a0:hello_world.py

แตกต่าง --ไปถึง/ee60eac:hello_world.py b/3f611a0:hello_world.py
ดัชนี e27f806..72a178d100644
---ถึง/ee60eac:hello_world.py
+++ ข/3f611a0:hello_world.py
@@-2,7+2,7 @@

def หลัก():
พิมพ์('สวัสดีครั้งแรก!')
- พิมพ์('สวัสดีครั้งที่สอง!')
+ พิมพ์('สาขาพัฒนากล่าวสวัสดี')

ถ้า__name__ =='__หลัก__':
หลัก()

คุณสามารถใช้หลักการเดียวกันเพื่อเปรียบเทียบการคอมมิตภายในสาขาเดียวกันได้เช่นกัน


เครื่องมือผสานภาพ

การดูการเปรียบเทียบแบบข้อความอาจเป็นเรื่องยาก หากคุณตั้งค่า Git difftool ด้วยแอปพลิเคชั่นผสานภาพอย่าง DiffMerge หรือ BeyondCompare คุณจะสามารถเห็นความแตกต่างได้ดีขึ้น

ศึกษาเพิ่มเติม:

ข้อมูลอ้างอิง: