คำถามและคำตอบสัมภาษณ์ GIT 50 อันดับแรก (2026)

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

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

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

คำถามและคำตอบสัมภาษณ์ GIT

คำถามและคำตอบสัมภาษณ์ GIT 50 อันดับแรก

1) Git คืออะไร และแตกต่างจากระบบควบคุมเวอร์ชันอื่นอย่างไร

Git คือระบบควบคุมเวอร์ชันแบบกระจายที่ออกแบบมาเพื่อติดตามการเปลี่ยนแปลงในซอร์สโค้ดระหว่างการพัฒนาซอฟต์แวร์ ต่างจากระบบรวมศูนย์อย่าง SVN หรือ CVS ตรงที่ Git ช่วยให้นักพัฒนาทุกคนมีสำเนาของรีพอริตี้ทั้งหมด รวมถึงประวัติทั้งหมด รูปแบบการกระจายศูนย์นี้ช่วยเพิ่มความเร็ว ความยืดหยุ่น และความน่าเชื่อถือ

ตัวอย่าง: เมื่อคุณโคลนที่เก็บข้อมูล Git คุณสามารถทำงานแบบออฟไลน์และคอมมิตในเครื่องได้ ซึ่งแตกต่างจากใน SVN ที่ต้องมีการเชื่อมต่ออินเทอร์เน็ตทุกครั้งที่คอมมิต

ปัจจัย ไป SVN
Archiเทคเจอร์ กระจาย ส่วนกลาง
ความเร็ว ได้เร็วขึ้น ช้าลง
งานออฟไลน์ ที่สนับสนุน ไม่ได้รับการสนับสนุน
การแตกแขนง มีน้ำหนักเบา หนักและช้า

👉 ดาวน์โหลด PDF ฟรี: คำถามและคำตอบสัมภาษณ์ GIT


2) อธิบายเวิร์กโฟลว์และวงจรชีวิตของไฟล์ Git

วงจรชีวิตไฟล์ Git แสดงถึงวิธีการเคลื่อนย้ายไฟล์ผ่านสถานะต่างๆ ในที่เก็บ

ไฟล์ใน Git สามารถมีอยู่ในสถานะหลักสี่สถานะดังต่อไปนี้: ไม่ได้ติดตาม, แก้ไข, ฉากและ ความมุ่งมั่น.

  1. ไม่ได้ติดตาม: ไฟล์ที่สร้างใหม่ยังไม่ได้เพิ่มไปยัง Git
  2. แก้ไข: ไฟล์ที่ได้รับการแก้ไขตั้งแต่การคอมมิทครั้งล่าสุด
  3. จัดฉาก: ไฟล์ที่เพิ่มโดยใช้ git add และพร้อมที่จะมุ่งมั่น
  4. มุ่งมั่น: ไฟล์ที่บันทึกถาวรไปยังที่เก็บด้วย git commit.

ตัวอย่าง: นักพัฒนาสร้างไฟล์ใหม่ → รัน git add → จากนั้นจึงทำการคอมมิต ลำดับนี้จะทำให้วงจรชีวิตของไฟล์สมบูรณ์ตั้งแต่ไม่มีการติดตามจนถึงการคอมมิต


3) การแตกสาขาและการผสานทำงานใน Git อย่างไร

การแบ่งสาขาช่วยให้นักพัฒนาหลายคนสามารถทำงานกับฟีเจอร์ต่างๆ พร้อมกันโดยไม่กระทบต่อฐานโค้ดหลัก แต่ละสาขาแสดงถึงสายการพัฒนาที่เป็นอิสระ

การผสานจะรวมการเปลี่ยนแปลงจากสาขาหนึ่งเข้าเป็นอีกสาขาหนึ่ง โดยทั่วไปจะรวมสาขาฟีเจอร์กลับเข้าไปในสาขาหลักอีกครั้ง

ตัวอย่าง: หากคุณสร้าง feature/login สาขาทำงานอย่างอิสระแล้วจึงรวมเข้ากับ mainคุณสามารถรวมฟีเจอร์ใหม่ของคุณได้อย่างปลอดภัย

คำสั่ง จุดมุ่งหมาย
git branch feature สร้างสาขาใหม่
git checkout feature สลับไปที่สาขา
git merge feature รวมกับสาขาหลัก

4) Git Objects มีกี่ประเภท?

Git จัดเก็บข้อมูลเป็นออบเจ็กต์ในฐานข้อมูลภายใน ออบเจ็กต์แบ่งออกเป็น 4 ประเภทหลัก ได้แก่:

  1. หยด: จัดเก็บข้อมูลไฟล์
  2. ต้นไม้: แสดงไดเรกทอรีและโครงสร้างไฟล์
  3. สัญญา: บันทึกการเปลี่ยนแปลงด้วยข้อมูลเมตา เช่น ผู้เขียน วันที่ และข้อมูลที่ส่งมาเหนือ
  4. คีย์เวิร์ด: ทำเครื่องหมายจุดที่เฉพาะเจาะจงในประวัติศาสตร์ มักใช้สำหรับการเผยแพร่

วัตถุเหล่านี้สร้างความสมบูรณ์และความไม่เปลี่ยนแปลงของ Git เพื่อให้แน่ใจว่าการคอมมิตแต่ละครั้งสามารถระบุได้เฉพาะผ่านแฮช SHA-1


5) ความแตกต่างระหว่าง Git fetch และ Git pull คืออะไร?

git fetch ดาวน์โหลดการเปลี่ยนแปลงจากที่เก็บข้อมูลระยะไกล แต่ไม่รวมการเปลี่ยนแปลงเหล่านั้นโดยอัตโนมัติ ระบบจะอัปเดตสาขาการติดตามระยะไกลในเครื่องของคุณ

git pull ดำเนินการทั้งการดึงข้อมูลและการรวมกันในขั้นตอนเดียว

คำสั่ง Descriptไอออน ใช้กรณี
git fetch ดาวน์โหลดการเปลี่ยนแปลงโดยไม่ต้องรวม เมื่อคุณต้องการตรวจสอบการอัปเดตก่อนการผสาน
git pull ดาวน์โหลดและรวมการเปลี่ยนแปลงโดยอัตโนมัติ เมื่อคุณต้องการการซิงโครไนซ์ทันที

ตัวอย่าง: ใช้ git fetch เมื่อทำงานร่วมกันเพื่อตรวจสอบการเปลี่ยนแปลงของผู้อื่นก่อนที่จะรวมกัน


6) Git ตรวจสอบความสมบูรณ์ของข้อมูลได้อย่างไร

Git ช่วยให้มั่นใจถึงความสมบูรณ์ของข้อมูลผ่าน การแฮช SHA-1ทุกคอมมิต ทรี และบล็อบจะถูกระบุด้วยแฮช 40 อักขระเฉพาะ วิธีนี้รับประกันว่าแม้การเปลี่ยนแปลงบิตเพียงเล็กน้อยก็จะเปลี่ยนแปลงแฮช ป้องกันการเสียหายหรือการถูกแทรกแซง

นอกจากนี้ Git ยังใช้ กำกับกราฟ acyclic (DAG) โครงสร้างที่การคอมมิตอ้างอิงถึงการคอมมิตหลัก เพื่อให้แน่ใจว่าประวัติมีความสอดคล้องและสามารถตรวจสอบได้

ตัวอย่าง: หากเนื้อหาของไฟล์มีการเปลี่ยนแปลง ค่า SHA-1 ก็จะเปลี่ยนแปลงไปด้วย ดังนั้น Git จะจดจำว่าเป็นเวอร์ชันใหม่ทันที


7) อธิบาย Git Rebase และความแตกต่างจาก Git Merge

ทั้งสอง git merge และ git rebase บูรณาการการเปลี่ยนแปลงจากสาขาหนึ่งไปสู่อีกสาขาหนึ่ง แต่มีแนวทางที่แตกต่างกัน

  • ผสาน: สร้างการรวมใหม่ที่รวมประวัติเข้าด้วยกัน
  • รีเบส: ย้ายหรือเล่นซ้ำการกระทำจากสาขาหนึ่งไปยังอีกสาขาหนึ่ง ทำให้เกิดประวัติเชิงเส้น
ปัจจัย ผสาน rebase
ประวัติการยืนยัน ไม่เป็นเชิงเส้น วัดเชิงเส้น
สร้างคอมมิทใหม่แล้ว ใช่ ไม่
ใช้กรณี อนุรักษ์ประวัติศาสตร์ ประวัติการทำความสะอาด

ตัวอย่าง: ใช้ git rebase เพื่อรักษาประวัติโครงการให้สะอาดในขณะที่ git merge จะดีกว่าสำหรับสาขาสาธารณะที่ใช้ร่วมกัน


8) Git hooks คืออะไร และมีประโยชน์อะไรบ้าง?

Git hooks คือสคริปต์แบบกำหนดเองที่เรียกใช้งานตามเหตุการณ์เฉพาะของ Git เช่น การคอมมิต การผสาน หรือการพุช สคริปต์เหล่านี้ช่วยบังคับใช้มาตรฐานการเขียนโค้ดและทำให้เวิร์กโฟลว์เป็นแบบอัตโนมัติ

ประเภทของตะขอ:

  • ฮุกด้านไคลเอนต์: ดำเนินการบนการดำเนินการภายในเครื่อง (เช่น ก่อนการคอมมิต)
  • ฮุกด้านเซิร์ฟเวอร์: รันบนการดำเนินการที่เก็บข้อมูลระยะไกล (เช่น รับล่วงหน้า)

ประโยชน์ที่ได้รับ:

  • ป้องกันการคอมมิทที่มีข้อผิดพลาดด้านการจัดรูปแบบ
  • ทำให้การลินต์หรือทดสอบโค้ดเป็นแบบอัตโนมัติ
  • รับรองเวิร์กโฟลว์ที่สอดคล้องกันระหว่างทีมต่างๆ

ตัวอย่าง: A pre-commit Hook สามารถปฏิเสธการยืนยันได้หากการทดสอบยูนิตล้มเหลว


9) ข้อดีและข้อเสียของการใช้ Git มีอะไรบ้าง?

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

โดยรวมแล้วโมเดลแบบกระจาย ความสมบูรณ์ของข้อมูล และความยืดหยุ่นของ Git ทำให้เป็นมาตรฐานอุตสาหกรรม แม้ว่านักพัฒนาหน้าใหม่ยังต้องเรียนรู้อีกมาก


10) คุณจะแก้ไขข้อขัดแย้งในการผสานใน Git ได้อย่างไร

ความขัดแย้งในการผสานเกิดขึ้นเมื่อ Git ไม่สามารถประสานการเปลี่ยนแปลงระหว่างสาขาได้โดยอัตโนมัติ

ขั้นตอนการแก้ไข:

  1. ระบุไฟล์ที่ขัดแย้งด้วย git status.
  2. เปิดไฟล์ ค้นหาเครื่องหมายความขัดแย้ง (<<<<<<<, =======, >>>>>>>).
  3. แก้ไขไฟล์ด้วยตนเองเพื่อเลือกหรือรวมการเปลี่ยนแปลง
  4. จัดเตรียมไฟล์โดยใช้ git add.
  5. ยืนยันการผสานที่ได้รับการแก้ไขด้วย git commit.

ตัวอย่าง: เมื่อนักพัฒนาสองคนแก้ไขบรรทัดเดียวกันในไฟล์บนสาขาที่แตกต่างกัน Git จะสร้างข้อขัดแย้งระหว่างการผสาน ซึ่งต้องมีการแก้ไขด้วยตนเอง


11) ความแตกต่างระหว่าง git reset, git revert และ git checkout คืออะไร

คำสั่งทั้งสามนี้ปรับเปลี่ยนประวัติ Git แตกต่างกันและมีจุดประสงค์ที่แตกต่างกัน

คำสั่ง ฟังก์ชัน ผลกระทบต่อข้อมูล ใช้กรณี
git reset ย้ายตัวชี้ HEAD ย้อนกลับไปยังคอมมิทที่ระบุ ประวัติการกระทำการเปลี่ยนแปลง เลิกทำการคอมมิตในเครื่อง
git revert สร้างคอมมิตใหม่ที่เลิกทำการเปลี่ยนแปลงก่อนหน้า เก็บรักษาประวัติการกระทำ เลิกทำการคอมมิตในสาขาที่ใช้ร่วมกันอย่างปลอดภัย
git checkout สลับสาขาหรือคืนค่าไฟล์ ไม่ส่งผลกระทบต่อประวัติการกระทำ ย้ายระหว่างสาขาหรือละทิ้งการเปลี่ยนแปลงในพื้นที่

ตัวอย่าง: หากคุณกรอกข้อมูลที่ละเอียดอ่อนโดยไม่ได้ตั้งใจ ให้ใช้ git revert เพื่อเลิกทำอย่างปลอดภัยโดยไม่ต้องเปลี่ยนประวัติการยืนยัน

ใช้ git reset --hard เฉพาะการแก้ไขในพื้นที่ก่อนการผลักดัน


12) อธิบายประเภทของการรีเซ็ตใน Git

Git จัดให้มีการรีเซ็ตหลักสามประเภทขึ้นอยู่กับว่าคุณต้องการเลิกทำการเปลี่ยนแปลงเมื่อใด

ประเภท คำสั่ง พฤติกรรม
เค้ก git reset --soft <commit> ย้าย HEAD แต่ยังคงดัชนีและไดเร็กทอรีการทำงานไว้เหมือนเดิม
สีผสม git reset --mixed <commit> ย้าย HEAD และรีเซ็ตดัชนี การเปลี่ยนแปลงยังคงอยู่ในไดเร็กทอรีการทำงาน
ยาก git reset --hard <commit> รีเซ็ต HEAD, ดัชนี และไดเร็กทอรีการทำงานทั้งหมด

ตัวอย่าง: หากคุณทำการเปลี่ยนแปลงก่อนกำหนด git reset --soft HEAD~1 ช่วยให้คุณสามารถยืนยันอีกครั้งหลังจากการแก้ไข


13) Git Stash คืออะไร และคุณควรใช้มันเมื่อใด?

git stash จัดเก็บการเปลี่ยนแปลงที่ยังไม่ได้ยืนยันชั่วคราว ช่วยให้คุณสามารถสลับสาขาได้โดยไม่สูญเสียงาน

สิ่งนี้มีประโยชน์อย่างยิ่งในระหว่างการทำงานหลายอย่างพร้อมกันหรือเมื่อคุณต้องตรวจสอบสาขาอื่นอย่างเร่งด่วน

คำสั่งทั่วไป:

  • git stash:บันทึกการปรับเปลี่ยนในเครื่องของคุณ
  • git stash pop: คืนค่าการเปลี่ยนแปลงที่ถูกซ่อนไว้
  • git stash list: แสดงรายการสะสมที่บันทึกไว้ทั้งหมด

ตัวอย่าง: หากคุณดำเนินการนำฟีเจอร์บางอย่างไปใช้ครึ่งทางแล้วเกิดปัญหาในการผลิต ให้เก็บการเปลี่ยนแปลงของคุณไว้ แก้ไขปัญหา แล้วนำงานที่เก็บไว้กลับมาใช้ใหม่


14) Git จัดการกับที่เก็บข้อมูลระยะไกลอย่างไร

ที่เก็บข้อมูลระยะไกลใน Git คือเวอร์ชันของโครงการของคุณที่โฮสต์อยู่บนอินเทอร์เน็ตหรือเครือข่าย ซึ่งใช้สำหรับการทำงานร่วมกันระหว่างนักพัฒนา

คำสั่งระยะไกลทั่วไป:

คำสั่ง Descriptไอออน
git remote add origin <url> เชื่อมโยงที่เก็บข้อมูลในเครื่องกับรีโมต
git push ส่งการยืนยันไปยังที่เก็บข้อมูลระยะไกล
git pull ดึงข้อมูลและรวมการเปลี่ยนแปลง
git fetch ดึงข้อมูลแต่ไม่รวมการเปลี่ยนแปลง

ตัวอย่าง: โดยทั่วไป นักพัฒนาจะโคลนที่เก็บข้อมูลระยะไกลจากแพลตฟอร์มเช่น GitHub หรือ GitLab เพื่อมีส่วนสนับสนุนโครงการที่ใช้ร่วมกัน


15) Git tags คืออะไร และเหตุใดจึงสำคัญ?

แท็กเป็นตัวชี้ไปยังการคอมมิทที่เฉพาะเจาะจง มักใช้เพื่อทำเครื่องหมายจุดเผยแพร่ (เช่น v1.0, v2.1).

พวกเขาให้เสถียรภาพโดยการอ้างอิงเวอร์ชันที่ไม่เปลี่ยนแปลงของฐานโค้ด

ประเภทของแท็ก:

  1. แท็กน้ำหนักเบา: การอ้างอิงการยืนยันแบบง่าย
  2. แท็กที่มีคำอธิบาย: เก็บข้อมูลเมตา (ผู้แต่ง, ข้อความ, วันที่)
คำสั่ง จุดมุ่งหมาย
git tag v1.0 สร้างแท็กน้ำหนักเบา
git tag -a v2.0 -m "Release 2.0" สร้างแท็กพร้อมคำอธิบาย
git push origin --tags ผลักแท็กทั้งหมดไปยังระยะไกล

ตัวอย่าง: ทีมงานเผยแพร่ใช้แท็กพร้อมคำอธิบายประกอบในการแพ็คเกจและปรับใช้เวอร์ชันผลิตภัณฑ์ที่เสถียร


16) Git Cherry-Pick คืออะไร และมีประโยชน์อย่างไร?

git cherry-pick อนุญาตให้รวมการคอมมิตเฉพาะจากสาขาหนึ่งไปยังอีกสาขาหนึ่งอย่างเลือกได้

สิ่งนี้มีประโยชน์เมื่อคุณต้องการแก้ไขจุดบกพร่องหรือคุณลักษณะเฉพาะโดยไม่ต้องผสานสาขาทั้งหมด

ตัวอย่าง: คุณสามารถแก้ไขได้จาก feature/bugfix ไปยัง main โดยใช้:

git cherry-pick <commit-hash>

ประโยชน์ที่ได้รับ:

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

17) Git Squash คืออะไร และมีประโยชน์อะไรบ้าง?

การรวมข้อมูลใน Git จะรวมข้อมูลหลายรายการเข้าเป็นรายการเดียว ทำให้ประวัติข้อมูลมีความสมบูรณ์และเรียบง่ายขึ้น

คำสั่ง:

git rebase -i HEAD~3

จากนั้นเลือก squash ตัวเลือกสำหรับการยืนยันที่คุณต้องการผสาน

ประโยชน์ที่ได้รับ:

  • สร้างประวัติศาสตร์อันกระชับ
  • ทำให้คำขอการดึงข้อมูลง่ายต่อการตรวจสอบ
  • ลดความยุ่งวุ่นวายจากการกระทำเล็กๆ น้อยๆ

ตัวอย่าง: ก่อนที่จะรวมสาขาฟีเจอร์ นักพัฒนาจะรวมคอมมิตเล็กๆ น้อยๆ ทั้งหมดให้กลายเป็นคอมมิตเดียวที่มีความหมาย


18) คุณสามารถย้อนกลับการคอมมิตที่ถูกพุชใน Git ได้อย่างไร?

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

git revert <commit-hash>
git push origin main

ความแตกต่างระหว่างการรีเซ็ตและ Revเอิร์ท:

ปัจจัย รีเซ็ต Revเอิร์ท
ประวัติขององค์กร เขียนประวัติศาสตร์ใหม่ อนุรักษ์ประวัติศาสตร์
ความปลอดภัย ไม่ปลอดภัยสำหรับที่เก็บข้อมูลที่ใช้ร่วมกัน ปลอดภัยสำหรับสาขาสาธารณะ
การใช้ การเลิกทำในเครื่อง การเลิกทำระยะไกล

ตัวอย่าง: หากมีการคอมมิทที่ผิดพลาดอยู่แล้วบน GitHub ให้ใช้ git revert แทน git reset เพื่อรักษาประวัติศาสตร์ร่วมกันให้สอดคล้องกัน


19) ความแตกต่างระหว่าง Git และ GitHub คืออะไร?

Git เป็น เครื่องมือควบคุมเวอร์ชันในขณะที่ GitHub เป็น แพลตฟอร์มบนคลาวด์ สำหรับการโฮสต์คลังข้อมูล Git

แง่มุม ไป GitHub
ธรรมชาติ เครื่องมือบรรทัดคำสั่ง บริการบนเว็บ
ฟังก์ชัน ติดตามการเปลี่ยนแปลงรหัสภายในเครื่อง ช่วยให้สามารถทำงานร่วมกันจากระยะไกลได้
ความต้องการทางอินเทอร์เน็ต สามารถเลือกหรือไม่เลือกก็ได้ ต้อง
กรรมสิทธิ์ โอเพ่นซอร์ส (โดย Linus Torvalds) ที่เป็นเจ้าของโดย Microsoft

ตัวอย่าง: นักพัฒนาใช้ Git เพื่อจัดการเวอร์ชันของโค้ดต้นฉบับในเครื่อง และใช้ GitHub เพื่อแบ่งปันและตรวจสอบโค้ดกับเพื่อนร่วมทีม


20) กลยุทธ์การรวม Git ที่แตกต่างกันมีอะไรบ้าง

Git มีกลยุทธ์ในการผสานหลายวิธี ขึ้นอยู่กับว่าคุณต้องการรวมการเปลี่ยนแปลงอย่างไร

กลยุทธ์ Descriptไอออน ใช้กรณี
ซ้ำ ค่าเริ่มต้น; รวมสองสาขา การผสานมาตรฐาน
ของเราเอง เก็บการเปลี่ยนแปลงของสาขาปัจจุบัน การยกเลิกการเปลี่ยนแปลงที่เข้ามา
ของพวกเขา เก็บการเปลี่ยนแปลงของสาขาขาเข้า การแทนที่การเปลี่ยนแปลงในท้องถิ่น
ปลาหมึกยักษ์ รวมสาขาหลายสาขาพร้อมกัน สาขาการบูรณาการ

ตัวอย่าง: ในระหว่างการรวมที่ซับซ้อน นักพัฒนาอาจใช้ recursive กลยุทธ์สำหรับการผสานมาตรฐานหรือ ours เพื่อให้ความสำคัญกับการเปลี่ยนแปลงในระดับท้องถิ่น


21) Detached HEAD ใน Git คืออะไร และจะแก้ไขได้อย่างไร

A หัวแยก เกิดขึ้นเมื่อ HEAD ตัวชี้ไม่ได้ชี้ไปที่สาขา แต่ชี้ไปที่คอมมิตเฉพาะเจาะจง สิ่งนี้จะเกิดขึ้นเมื่อคุณตรวจสอบคอมมิตก่อนหน้าโดยตรงโดยใช้:

git checkout <commit-hash>

ในสถานะนี้ การคอมมิตใหม่ใดๆ จะไม่เชื่อมโยงกับสาขา และอาจสูญหายได้หากไม่มีการอ้างอิงอย่างถูกต้อง

วิธีแก้ปัญหา:

  1. สร้างสาขาใหม่จากสถานะแยก:
    git checkout -b temp-branch
  2. จากนั้นทำการคอมมิทหรือรวมตามปกติ

ตัวอย่าง: เมื่อทดสอบโค้ดเวอร์ชันเก่า คุณอาจป้อน HEAD ที่แยกออกมา ควรสร้าง branch เสมอเพื่อเก็บการเปลี่ยนแปลงไว้


22) จุดประสงค์ของ git reflog คืออะไร และคุณควรใช้มันเมื่อใด?

git reflog เป็นคำสั่งอันทรงพลังที่ติดตามการเคลื่อนไหวทั้งหมดของ HEAD ตัวชี้ แม้กระทั่งตัวชี้ที่ไม่ได้เป็นส่วนหนึ่งของประวัติสาขาที่มองเห็นได้ ทำหน้าที่เป็นตาข่ายนิรภัยสำหรับการกู้คืนคอมมิตที่หายไป

การใช้งาน:

git reflog
git checkout <commit-hash>

ตัวอย่าง:

หากคุณวิ่งโดยไม่ได้ตั้งใจ git reset --hard และสูญเสียการกระทำล่าสุด git reflog ช่วยให้คุณค้นหาและเรียกคืนได้

ประโยชน์ที่ได้รับ:

  • กู้คืนงานที่สูญหายหลังจากการรีเบสหรือรีเซ็ตผิดพลาด
  • ให้ประวัติการนำทางการยืนยันโดยละเอียด
  • เพิ่มความปลอดภัยในขั้นตอนการทำงานที่ซับซ้อน

23) อธิบาย Git Submodules และกรณีการใช้งาน

A Git ซับโมดูล ช่วยให้คุณสามารถรวมคลังเก็บ Git หนึ่งไว้เป็นโฟลเดอร์ย่อยภายในคลังเก็บอื่นได้ ใช้สำหรับจัดการโปรเจกต์ที่ต้องพึ่งพาคลังเก็บอื่น

คำสั่งทั่วไป:

git submodule add <repo-url>
git submodule update --init

ตัวอย่าง: แอปพลิเคชันเว็บอาจรวมถึงโมดูลการตรวจสอบสิทธิ์ที่ใช้ร่วมกันเป็นซับโมดูล Git ในหลายโครงการ

ข้อดี ข้อเสีย
Promoการนำโค้ด tes มาใช้ซ้ำ อาจทำให้กระบวนการ CI/CD มีความซับซ้อน
รักษาประวัติที่เป็นอิสระ ต้องมีการอัปเดตด้วยตนเอง
รับประกันความสอดคล้องของเวอร์ชัน เส้นโค้งการเรียนรู้ที่สูงขึ้น

24) เวิร์กโฟลว์ Git คืออะไร และมีประเภทใดบ้าง

เวิร์กโฟลว์ Git กำหนดแนวทางแบบมีโครงสร้างที่ทีมต่างๆ ใช้ในการทำงานร่วมกับ Git ประเภทที่ได้รับความนิยมมากที่สุด ได้แก่:

Workflow Descriptไอออน ใช้กรณี
การไหลของ Git ใช้คุณลักษณะ พัฒนา และเผยแพร่สาขา โครงการขนาดใหญ่
การไหลของ GitHub การไหลแบบง่ายโดยใช้สาขาหลักและสาขาคุณลักษณะ การปรับใช้อย่างต่อเนื่อง
การไหลของ GitLab รวม Git Flow เข้ากับการรวม CI/CD โครงการที่มุ่งเน้น DevOps
พื้นฐานแบบทรังค์ นักพัฒนามุ่งมั่นที่จะใช้สาขาที่ใช้ร่วมกันเพียงแห่งเดียว ทีมงานส่งมอบที่คล่องตัวและรวดเร็ว

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


25) Git Bisect คืออะไร และช่วยในการดีบักได้อย่างไร

git bisect เป็นเครื่องมือแก้ไขจุดบกพร่องอันทรงพลังที่ใช้การค้นหาแบบไบนารีเพื่อระบุคอมมิทที่ทำให้เกิดจุดบกพร่อง

ขั้นตอนการทำงานตัวอย่าง:

  1. เริ่มแบ่งครึ่ง: git bisect start
  2. ทำเครื่องหมายการกระทำปัจจุบันว่าไม่ดี: git bisect bad
  3. ทำเครื่องหมายการกระทำที่ดีครั้งสุดท้ายที่ทราบ: git bisect good <commit>
  4. Git ตรวจสอบจุดกึ่งกลางโดยอัตโนมัติ
  5. ทดสอบและดำเนินการต่อจนกว่าจะพบการกระทำที่ผิดพลาด

ประโยชน์ที่ได้รับ:

  • เพิ่มความเร็วในการติดตามจุดบกพร่องในฐานโค้ดขนาดใหญ่
  • ลดการตรวจสอบการกระทำด้วยตนเอง
  • เหมาะสำหรับการทดสอบการถดถอย CI/CD

26) ความแตกต่างระหว่าง Git Merge Conflict และ Rebase Conflict คืออะไร

ทั้งสองอย่างนี้เกิดขึ้นเมื่อ Git ไม่สามารถปรับความแตกต่างของโค้ดได้โดยอัตโนมัติ แต่เกิดขึ้นในบริบทที่แตกต่างกัน

ประเภท เมื่อมันเกิดขึ้น ความละเอียด
รวมความขัดแย้ง ในระหว่าง git merge ระหว่างสาขา แก้ไขในสาขาเป้าหมาย
ความขัดแย้งในการรีเบส ในระหว่าง git rebase ขณะกำลังเล่นซ้ำการกระทำ แก้ไขในขณะที่สร้างฐานใหม่ จากนั้นดำเนินการต่อด้วย git rebase --continue

ตัวอย่าง: หากแก้ไขบรรทัดเดียวกันต่างกันในสองสาขา จะเกิดข้อขัดแย้งในการผสาน ระหว่างการสร้างฐานใหม่ การเปลี่ยนแปลงที่คล้ายกันจะกระตุ้นให้เกิดข้อขัดแย้งในการสร้างฐานใหม่ด้วย


27) สามารถรวม Git เข้ากับ CI/CD pipeline ได้อย่างไร

Git สร้างรากฐานให้กับเวิร์กโฟลว์ CI/CD สมัยใหม่ด้วยการเรียกใช้กระบวนการอัตโนมัติในแต่ละคอมมิตหรือดึงคำขอ

ตัวอย่างการบูรณาการ:

  • การยืนยันการผลักดัน → ทริกเกอร์ไปป์ไลน์ CI (ผ่าน Jenkins, GitHub Actions หรือ GitLab CI)
  • สร้างและทดสอบ → การทดสอบอัตโนมัติจะตรวจสอบความถูกต้องของการยืนยัน
  • ปรับใช้ → การเปลี่ยนแปลงจะถูกผลักดันไปสู่การจัดเตรียมหรือการผลิต

ประโยชน์ที่ได้รับ:

  • รับประกันการใช้งานที่สอดคล้องกัน
  • ช่วยให้เกิดรอบการตอบรับที่รวดเร็ว
  • ลดข้อผิดพลาดของมนุษย์ในการเผยแพร่

ตัวอย่าง: GitHub Actions สามารถทดสอบและปรับใช้โครงการโดยอัตโนมัติเมื่อมีการเปลี่ยนแปลงเกิดขึ้น main สาขา.


28) ความแตกต่างระหว่าง git clean และ git reset คืออะไร?

คำสั่ง จุดมุ่งหมาย ขอบเขต ตัวอย่าง
git clean ลบไฟล์ที่ไม่ได้ติดตาม ไดเรกทอรีการทำงาน git clean -f -d
git reset ย้ายตัวชี้ HEAD คอมมิต ดัชนี และเวิร์กทรี git reset --hard HEAD~1

ตัวอย่าง: หากพื้นที่ทำงานของคุณมีไฟล์ชั่วคราวหรือไฟล์ที่สร้างขึ้นซึ่ง Git ไม่สามารถติดตามได้ ให้ใช้ git cleanหากคุณต้องการเลิกทำการคอมมิต ให้ใช้ git reset.

เคล็ดลับ: ตรวจสอบเสมอด้วย git clean -n ก่อนดำเนินการเพื่อหลีกเลี่ยงการลบโดยไม่ได้ตั้งใจ


29) Git Reflog เทียบกับ Git Log คืออะไร?

แม้ว่าทั้งสองจะแสดงประวัติการกระทำ แต่มีวัตถุประสงค์ที่แตกต่างกัน

คำสั่ง แทร็ค รวมถึงการลบคอมมิต ใช้กรณี
git log ประวัติการกระทำที่มองเห็นได้ ไม่ Revความคืบหน้าโครงการดู
git reflog การเคลื่อนไหวของศีรษะทั้งหมด ใช่ กู้คืนการกระทำที่สูญหาย

ตัวอย่าง: หลังจากลบสาขาโดยไม่ได้ตั้งใจ คุณสามารถใช้ git reflog เพื่อค้นหาและกู้คืนการกระทำครั้งสุดท้ายซึ่งจะไม่ปรากฏใน git log.


30) แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้ Git อย่างมีประสิทธิภาพในทีมงานขนาดใหญ่มีอะไรบ้าง

  1. ใช้ข้อตกลงการตั้งชื่อสาขา: ปฏิบัติตามรูปแบบเช่น feature/login-ui or bugfix/payment.
  2. มุ่งมั่นบ่อยครั้งแต่มีคุณค่า: ให้แต่ละคอมมิทมุ่งเน้นไปที่การเปลี่ยนแปลงเชิงตรรกะเพียงหนึ่งเดียว
  3. เขียน Descriptive Commit Messages: ใช้โหมดบังคับ เช่น "Fix user login validation."
  4. Rebase ก่อนการผสาน: รักษาประวัติการส่งให้สะอาด
  5. ใช้ Pull Request สำหรับ Revนั่นคือ: Promoความร่วมมือและคุณภาพของโค้ด
  6. ปล่อยแท็กอย่างสม่ำเสมอ: ช่วยควบคุมเวอร์ชันและย้อนกลับ
  7. การทดสอบอัตโนมัติผ่าน CI/CD: รับประกันการบูรณาการที่เสถียรและการเผยแพร่ที่รวดเร็วยิ่งขึ้น

ตัวอย่าง: ในการพัฒนาองค์กร การใช้ Git อย่างมีโครงสร้างจะช่วยป้องกันความขัดแย้งและทำให้การจัดการการเผยแพร่ง่ายขึ้น


31) Git Internals คืออะไร และ Git จัดเก็บข้อมูลอย่างไร

Git Internals หมายถึงสถาปัตยกรรมระดับต่ำที่ขับเคลื่อนการทำงานของ Git Git จัดเก็บทุกอย่าง (ไฟล์ ไดเรกทอรี การคอมมิต) ไว้เป็น วัตถุ ที่ .git/objects ไดเรกทอรี วัตถุเหล่านี้จะถูกระบุโดย แฮช SHA-1 และจัดอยู่ในหมวดหมู่ บล็อบ ต้นไม้ คอมมิต และแท็ก.

วงจรชีวิตการจัดเก็บข้อมูล:

  1. เมื่อเพิ่มไฟล์ เนื้อหาจะถูกเก็บไว้เป็น blob.
  2. A tree โครงสร้างไฟล์แผนที่
  3. A commit เชื่อมโยงต้นไม้และข้อมูลเมตา
  4. A tag การอ้างอิงการยืนยันสำหรับการเปิดตัว

ตัวอย่าง: เล่น git cat-file -p <hash> ช่วยให้คุณสามารถตรวจสอบวัตถุ Git ได้โดยตรง

การออกแบบนี้ช่วยให้มั่นใจ ความสมบูรณ์ของข้อมูล, การตรวจสอบย้อนกลับเวอร์ชันและ ประสิทธิภาพน้ำหนักเบาทำให้ Git มีประสิทธิภาพสูงเมื่อเทียบกับระบบเก่าอย่าง SVN


32) ความแตกต่างระหว่าง Git Rebase Interactive และ Git Merge คืออะไร?

ปัจจัย Git Rebase แบบโต้ตอบ (git rebase -i) การผสาน Git
จุดมุ่งหมาย อนุญาตให้แก้ไข จัดเรียงใหม่ และบีบอัดคอมมิท รวมประวัติศาสตร์
ประวัติขององค์กร เขียนประวัติศาสตร์ใหม่ รักษาการคอมมิตทั้งหมด
ใช้กรณี การทำความสะอาดก่อนการผสาน การรักษาไทม์ไลน์ดั้งเดิม

ตัวอย่าง: ก่อนที่จะรวมสาขาฟีเจอร์ นักพัฒนาอาจใช้:

git rebase -i main

เพื่อลบการคอมมิทที่ไม่จำเป็นและสร้างประวัติเชิงเส้นที่สะอาดขึ้น

ผสาน ปลอดภัยกว่าสำหรับสาขาที่ร่วมมือกันในขณะที่ รีเบส เพิ่มความสามารถในการอ่านสำหรับเวิร์กโฟลว์การพัฒนาส่วนตัว


33) Sparse Checkout ใน Git คืออะไร และมีประโยชน์อะไรบ้าง?

การชำระเงินแบบเบาบาง ช่วยให้นักพัฒนาสามารถโคลนหรือทำงานกับไฟล์เพียงบางส่วนจากที่เก็บข้อมูลขนาดใหญ่ได้ ช่วยลดการใช้พื้นที่เก็บข้อมูลในเครื่องและเพิ่มความเร็วในการทำงาน

คำสั่ง:

git clone --no-checkout <repo-url>
git sparse-checkout init --cone
git sparse-checkout set <folder-path>

ประโยชน์ที่ได้รับ:

  • ปรับปรุงประสิทธิภาพการทำงานใน monorepos
  • ลดการใช้งานดิสก์
  • เหมาะสำหรับสถาปัตยกรรมไมโครเซอร์วิส

ตัวอย่าง: ในโครงการองค์กรขนาดใหญ่ นักพัฒนาอาจต้องการเพียง /frontend โฟลเดอร์ Sparse Checkout จะดาวน์โหลดเฉพาะไดเรกทอรีนั้นเท่านั้น โดยหลีกเลี่ยงการใช้โค้ดแบ็กเอนด์ขนาดหลายกิกะไบต์ที่ไม่จำเป็น


34) Shallow Clone คืออะไร และควรใช้เมื่อใด?

A โคลนตื้น ดาวน์โหลดเพียงส่วนหนึ่งของประวัติของที่เก็บข้อมูลเท่านั้น ซึ่งทำให้การโคลนเร็วขึ้นมาก

คำสั่ง:

git clone --depth=1 <repo-url>

ประโยชน์ที่ได้รับ:

  • ลดเวลาโคลนสำหรับที่เก็บข้อมูลขนาดใหญ่
  • ประหยัดแบนด์วิดท์และพื้นที่ดิสก์
  • มีประโยชน์สำหรับ CI pipeline ที่ต้องการคอมมิตล่าสุดเท่านั้น

ข้อเสีย:

  • ไม่สามารถเข้าถึงคอมมิตเก่าหรือรีเบสเกินความลึกที่ดึงมาได้
  • การมองเห็นประวัติศาสตร์ที่จำกัด

ตัวอย่าง: ระบบ CI/CD มักใช้โคลนตื้นๆ เพื่อดึงเวอร์ชันโค้ดล่าสุดอย่างรวดเร็วสำหรับการสร้างอัตโนมัติโดยไม่ต้องมีประวัติการคอมมิตทั้งหมด


35) Git LFS (Large File Storage) คืออะไร และทำไมจึงใช้?

git-lfs (Large File Storage) เป็นส่วนขยายที่แทนที่ไฟล์ขนาดใหญ่ (เช่น รูปภาพ ชุดข้อมูล ไบนารี) ด้วยตัวชี้ข้อความน้ำหนักเบาภายใน Git ในขณะที่จัดเก็บเนื้อหาจริงในเซิร์ฟเวอร์ LFS ระยะไกล

ตัวอย่างคำสั่ง:

git lfs install
git lfs track "*.zip"

ข้อดี:

  • ช่วยให้ที่เก็บข้อมูลมีน้ำหนักเบา
  • ปรับปรุงประสิทธิภาพการทำงานกับไฟล์ไบนารีขนาดใหญ่
  • ทำงานร่วมกับ GitHub, GitLab และ Bitbucket ได้อย่างราบรื่น

ตัวอย่าง: ทีมพัฒนาเกมใช้ Git LFS เพื่อจัดการทรัพยากร 3 มิติขนาดใหญ่โดยไม่ทำให้การทำงานปกติของ Git ช้าลง


36) คุณจะกำหนดค่า Git เพื่อประสิทธิภาพที่เหมาะสมที่สุดได้อย่างไร

คุณสามารถปรับปรุงความเร็วและการใช้งานของ Git ได้โดยการปรับแต่งพารามิเตอร์การกำหนดค่า

ปฏิบัติที่ดีที่สุด:

  • เปิดใช้งานการบีบอัด: git config --global core.compression 9
  • ตั้งค่า GC อัตโนมัติ (การเก็บขยะ): git gc --auto
  • ใช้การดึงข้อมูลแบบขนาน (v2.31+): git config --global fetch.parallel 4
  • เปิดใช้งานการแคชข้อมูลรับรอง: git config --global credential.helper cache

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


37) Commit Signing (GPG) ใน Git คืออะไร และเหตุใดจึงสำคัญ?

การลงนามยืนยันการใช้งาน GPG (GNU Privacy Guard) เพื่อตรวจสอบความถูกต้องของข้อมูลโดยการเข้ารหัสเพื่อให้แน่ใจว่าการเปลี่ยนแปลงมาจากผู้มีส่วนร่วมที่เชื่อถือได้

ตัวอย่างการตั้งค่า:

git config --global user.signingkey <GPG-key>
git commit -S -m "Signed commit"

ประโยชน์ที่ได้รับ:

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

ตัวอย่าง: โครงการโอเพ่นซอร์สมักต้องการการยืนยันการลงนามโดย GPG เพื่อยืนยันความถูกต้องของการมีส่วนร่วมจากนักพัฒนาภายนอก


38) Git จัดการไฟล์ไบนารีแตกต่างจากไฟล์ข้อความอย่างไร

Git ได้รับการปรับให้เหมาะสมสำหรับโค้ดต้นฉบับและแทร็กที่ใช้ข้อความ การเปลี่ยนแปลงทีละบรรทัดซึ่งทำงานได้ไม่ดีนักสำหรับไฟล์ไบนารี ไฟล์ไบนารีจะถูกจัดเก็บเป็นบล็อบเดี่ยวๆ — การแก้ไขใดๆ จะสร้างเวอร์ชันใหม่แทนที่จะเป็น diff

ชนิดของไฟล์ ประสิทธิภาพการจัดเก็บ การสนับสนุนที่แตกต่างกัน การจัดการที่แนะนำ
ข้อความ มีประสิทธิภาพมาก ใช่ Git เริ่มต้น
เลขฐานสอง ไม่มีประสิทธิภาพ ไม่ ใช้ Git LFS

ตัวอย่าง: สำหรับที่เก็บข้อมูลที่มีรูปภาพจำนวนมาก การเปิดใช้งาน Git LFS จะช่วยป้องกันไม่ให้ประสิทธิภาพลดลงอันเนื่องมาจากการอัปเดตไฟล์ไบนารีบ่อยครั้ง


39) คุณแก้ไขปัญหา Git ทั่วไป เช่น การแยก HEAD หรือข้อผิดพลาดในการผสานได้อย่างไร

ปัญหาทั่วไปและวิธีแก้ไข:

»Ñ­ËÒ ก่อให้เกิด Solution
หัวแยก การตรวจสอบการกระทำที่เฉพาะเจาะจง สร้างสาขาด้วย git checkout -b new-branch
รวมความขัดแย้ง การแก้ไขที่ขัดแย้งในไฟล์ แก้ไขด้วยตนเองแล้ว git add และ git commit
การสูญเสียความมุ่งมั่น การรีเซ็ตหรือรีเบสโดยไม่ได้ตั้งใจ ใช้ git reflog การกู้คืน
ผลักปฏิเสธ การอัปเดตระยะไกลข้างหน้า ดึงหรือเปลี่ยนฐานก่อนผลัก

ตัวอย่าง: เมื่อเกิดข้อผิดพลาด "ไม่ส่งต่ออย่างรวดเร็ว" มักหมายถึงมีการเปลี่ยนแปลงระยะไกลเกิดขึ้น — ใช้ git pull --rebase เพื่อซิงโครไนซ์ก่อนที่จะลองใหม่อีกครั้ง


40) แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัยสำหรับคลัง Git คืออะไร

  1. ใช้การตรวจสอบสิทธิ์ SSH หรือ HTTPS: หลีกเลี่ยงการใช้ข้อมูลประจำตัวแบบธรรมดา
  2. เปิดใช้งาน 2FA บนแพลตฟอร์มโฮสติ้ง Git
  3. หลีกเลี่ยงการเปิดเผยความลับหรือคีย์: ใช้ .gitignore หรือเครื่องมือเช่น GitGuardian
  4. ลงนามยืนยันด้วยคีย์ GPG
  5. จำกัดการควบคุมการเข้าถึง: บังคับใช้หลักการสิทธิพิเศษน้อยที่สุด
  6. ใช้กฎการป้องกันสาขาสำหรับ main or master.
  7. ดำเนินการตรวจสอบที่เก็บข้อมูลเป็นประจำ

ตัวอย่าง: บริษัทต่างๆ มักบูรณาการการสแกนความลับและบังคับใช้การยืนยันที่ลงนามในไปป์ไลน์ CI/CD เพื่อป้องกันการรั่วไหลของข้อมูลและการเปลี่ยนแปลงที่ไม่ได้รับอนุญาต


41) คุณจะทำให้การดำเนินการ Git อัตโนมัติโดยใช้เชลล์หรือ Python สคริปต์?

ระบบอัตโนมัติของ Git ช่วยเพิ่มประสิทธิภาพและความสม่ำเสมอในการทำงานซ้ำๆ เช่น การยืนยัน การรวม และการปรับใช้

ตัวอย่าง – สคริปต์เชลล์:

#!/bin/bash
git add .
git commit -m "Auto commit on $(date)"
git push origin main

ตัวอย่าง - Python สคริปต์ (ใช้ GitPython):

from git import Repo
repo = Repo('.')
repo.git.add(A=True)
repo.index.commit("Automated commit")
origin = repo.remote(name='origin')
origin.push()

ประโยชน์ที่ได้รับ:

  • ลดความพยายามในการทำงานด้วยมือ
  • รับประกันรูปแบบการกระทำที่สอดคล้องกัน
  • บูรณาการกับ CI/CD และ DevOps pipeline ได้อย่างราบรื่น

42) Git Hooks คืออะไร และสามารถใช้ในระบบอัตโนมัติได้อย่างไร

Git ฮุกส์ เป็นสคริปต์ที่ถูกเรียกใช้งานโดยเหตุการณ์ Git เฉพาะ ซึ่งใช้เพื่อบังคับใช้กฎหรือทำให้กระบวนการเป็นอัตโนมัติ

ประเภทของตะขอ:

ประเภท วิ่งบน ตัวอย่าง
ด้านลูกค้า เครื่องของนักพัฒนา pre-commit, prepare-commit-msg
ฝั่งเซิร์ฟเวอร์ ที่เก็บข้อมูลระยะไกล pre-receive, post-receive

ตัวอย่าง: A pre-commit hook สามารถรัน linter หรือทดสอบยูนิตก่อนที่จะอนุญาตให้คอมมิทได้

ประโยชน์ที่ได้รับ:

  • รักษาคุณภาพของโค้ด
  • ป้องกันการละเมิดนโยบาย
  • ทำให้งานตรวจสอบซ้ำๆ ในเวิร์กโฟลว์เป็นแบบอัตโนมัติ

43) คุณจะไมเกรชันโครงการจาก SVN หรือ Mercurial ไปยัง Git ได้อย่างไร

การย้ายจากระบบรวมศูนย์เช่น SVN ไปยัง ไป เกี่ยวข้องกับการแปลงแบบมีโครงสร้างเพื่อเก็บรักษาประวัติการส่ง

ขั้นตอน:

  1. ติดตั้งเครื่องมือการไมเกรชัน: git svn or svn2git.
  2. โคลนที่เก็บข้อมูล SVN:
    git svn clone <SVN_URL> --trunk=trunk --branches=branches --tags=tags
  3. แปลงแท็กและสาขา
  4. ผลักไปยังที่เก็บข้อมูล Git ระยะไกล (เช่น GitHub)

ข้อดี:

  • เปิดใช้งานเวิร์กโฟลว์แบบกระจาย
  • เพิ่มประสิทธิภาพและความยืดหยุ่น
  • ลดความซับซ้อนของการแตกสาขาและการผสาน

ตัวอย่าง: องค์กรที่ย้ายจากระบบ SVN เดิมใช้ svn2git เพื่อรักษาความเป็นผู้ประพันธ์และบันทึกประวัติ


44) ความแตกต่างระหว่าง Git Flow และ Trunk-Based Development คืออะไร

แง่มุม การไหลของ Git การพัฒนาตามลำต้น
การแตกแขนง หลายสาขา (พัฒนา, เผยแพร่) สาขาหลักเดี่ยว
รุ่นวางจำหน่าย รอบการเปิดตัวคงที่ การปรับใช้อย่างต่อเนื่อง
ความซับซ้อน ปานกลางถึงสูง ต่ำ
ที่ดีที่สุดสำหรับ ทีมงานขนาดใหญ่และมีเสถียรภาพ ทีมงานที่คล่องตัวและเคลื่อนไหวรวดเร็ว

ตัวอย่าง: Git Flow เหมาะที่สุดสำหรับโครงการระดับองค์กรที่มีการเผยแพร่แบบควบคุม ในขณะที่ Trunk-Based เหมาะอย่างยิ่งสำหรับการเริ่มต้นหรือไมโครเซอร์วิสที่ความเร็วเป็นสิ่งสำคัญ

การเปรียบเทียบผลประโยชน์:

  • การไหลของ Git: การควบคุมเวอร์ชันที่แข็งแกร่ง
  • แบบ Trunk-Based: การตอบรับที่รวดเร็วยิ่งขึ้นและการจัดตำแหน่ง CI/CD

45) กลยุทธ์ใดบ้างที่สามารถเพิ่มประสิทธิภาพการทำงานของ Git สำหรับที่เก็บข้อมูลขนาดใหญ่ได้

สำหรับโครงการระดับองค์กรที่มีการยืนยันหรือผู้สนับสนุนหลายพันรายการ ประสิทธิภาพของ Git อาจลดลงหากไม่ได้รับการปรับให้เหมาะสม

กลยุทธ์การเพิ่มประสิทธิภาพที่สำคัญ:

  1. ใช้ โคลนตื้น (--depth=1) เพื่อการชำระเงินที่รวดเร็วยิ่งขึ้น
  2. ใช้ การชำระเงินแบบเบาบาง เพื่อดึงเฉพาะไดเรกทอรีที่เกี่ยวข้องเท่านั้น
  3. วิ่ง การเก็บขยะ: git gc --aggressive.
  4. แยก monorepos ออกเป็น submodules หรือ microservices
  5. บีบอัดวัตถุและแพ็คไฟล์เป็นประจำ

ตัวอย่าง: ใน monorepos ที่เกิน 10 GB การเปิดใช้งานการชำระเงินแบบเบาบางและการรวบรวมขยะปกติจะช่วยลดเวลาการโคลนและการดึงข้อมูลอย่างมาก


46) Git รองรับการพัฒนาแบบร่วมมือกันในทีมแบบกระจายอย่างไร

Git ช่วยให้การทำงานร่วมกันเป็นไปได้ด้วยการกระจายสำเนาของคลังข้อมูลทั้งหมดไปยังนักพัฒนา นักพัฒนาแต่ละคนสามารถคอมมิทในเครื่อง ผลักดันการเปลี่ยนแปลงไปยังรีโมต และผสานรวมงานของผู้อื่นได้

ตัวอย่างเวิร์กโฟลว์การทำงานร่วมกัน:

  1. ฟอร์กที่เก็บข้อมูล
  2. สร้างสาขาคุณลักษณะ
  3. ผลักดันการเปลี่ยนแปลงและเปิดคำขอการดึง
  4. Revมองและรวมเข้าเป็น main.

ประโยชน์ที่ได้รับ:

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

ตัวอย่าง: ผู้สนับสนุนโอเพ่นซอร์สทั่วโลกร่วมมือกันแบบอะซิงโครนัสผ่านการแยกและดึงคำขอที่โฮสต์บน GitHub


47) Git Garbage Collection คืออะไร และเหตุใดจึงสำคัญ?

git gc (การรวบรวมขยะ) ทำความสะอาดไฟล์ที่ไม่จำเป็นและเพิ่มประสิทธิภาพการจัดเก็บโดยการบีบอัดวัตถุและตัดแต่งคอมมิทที่ไม่สามารถเข้าถึงได้

คำสั่ง:

git gc --aggressive --prune=now

ประโยชน์ที่ได้รับ:

  • เพิ่มพื้นที่ว่างบนดิสก์
  • ปรับปรุงประสิทธิภาพการทำงานของที่เก็บข้อมูล
  • ลดความซ้ำซ้อนในวัตถุการยืนยัน

ตัวอย่าง: นักพัฒนามักจะทำงาน git gc หลังการผสานหรือการลบสาขาหลายครั้งเพื่อรักษาสุขภาพของที่เก็บข้อมูล โดยเฉพาะอย่างยิ่งในโครงการที่มีอายุยาวนาน


48) Git Blame คืออะไร และใช้แก้จุดบกพร่องอย่างไร

git blame ระบุว่าคอมมิทและผู้เขียนคนใดแก้ไขบรรทัดสุดท้ายของไฟล์แต่ละบรรทัด

ตัวอย่างคำสั่ง:

git blame app.py

ใช้กรณี:

  • การติดตามการแนะนำจุดบกพร่อง
  • ระบุความเป็นเจ้าของของส่วนต่างๆ ของโค้ด
  • การตรวจสอบการเปลี่ยนแปลงเพื่อความรับผิดชอบ

ตัวอย่าง: หากฟังก์ชันเริ่มล้มเหลวหลังจากการอัปเดตล่าสุด git blame สามารถระบุผู้กระทำการและนักพัฒนาที่ทำการเปลี่ยนแปลงได้อย่างชัดเจน ช่วยให้แก้ไขจุดบกพร่องได้รวดเร็วยิ่งขึ้น


49) ความแตกต่างระหว่าง Fork และ Cloning ใน Git คืออะไร?

ปัจจัย ส้อม โคลน
คำนิยาม สำเนาของที่เก็บข้อมูลภายใต้บัญชีของคุณบนบริการโฮสติ้ง สำเนาท้องถิ่นของที่เก็บข้อมูล
สถานที่ ฝั่งเซิร์ฟเวอร์ (เช่น GitHub) เครื่องของนักพัฒนา
ใช้กรณี การมีส่วนร่วมในโครงการอื่น ๆ การพัฒนาท้องถิ่น
ความสัมพันธ์ เชื่อมต่อผ่านคำขอดึง ซิงค์โดยตรงกับรีโมท

ตัวอย่าง: เมื่อมีส่วนสนับสนุนโครงการโอเพนซอร์ส คุณจะทำการฟอร์กที่เก็บข้อมูล ทำการเปลี่ยนแปลงในเครื่องหลังจากโคลน และส่งคำขอการดึงเพื่อตรวจสอบ


50) ข้อผิดพลาด Git ที่พบบ่อยที่สุดคืออะไร และจะหลีกเลี่ยงได้อย่างไร?

ผิดพลาด Descriptไอออน การป้องกัน
การยืนยันข้อมูลที่ละเอียดอ่อน รวมความลับหรือข้อมูลประจำตัว ใช้ .gitignore หรือ GitGuardian
การบังคับผลักไปยังสาขาที่ใช้ร่วมกัน เขียนทับงานของผู้อื่น ใช้ --force-with-lease
คอมมิตไบนารีขนาดใหญ่ ทำให้ประสิทธิภาพการทำงานของ repo ช้าลง ใช้ Git LFS
ข้ามการตรวจสอบโค้ด นำไปสู่คุณภาพที่ไม่ดี ใช้คำขอดึง
การละเว้นความขัดแย้งในการรีเบส ก่อให้เกิดความวุ่นวายในการรวมตัว แก้ไขข้อขัดแย้งอย่างรอบคอบก่อนผลักดัน

ตัวอย่าง: นักพัฒนาดันโดยไม่ได้ตั้งใจ .env ไฟล์ที่มีข้อมูลประจำตัวอาจเปิดเผยข้อมูลที่ละเอียดอ่อนได้ ซึ่งเราสามารถหลีกเลี่ยงได้ด้วย .gitignore กฎและข้อกำหนดก่อนการคอมมิท

🔍 คำถามสัมภาษณ์ GIT ยอดนิยมพร้อมสถานการณ์จริงและคำตอบเชิงกลยุทธ์

1) Git คืออะไร และแตกต่างจากระบบควบคุมเวอร์ชันอื่นอย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินความเข้าใจของคุณเกี่ยวกับพื้นฐานของ Git และข้อดีเหนือระบบรวมศูนย์

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


2) คุณสามารถอธิบายความแตกต่างระหว่าง git fetch, git pull และ git merge ได้หรือไม่?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์กำลังทดสอบความรู้ของคุณเกี่ยวกับคำสั่ง Git ทั่วไปและวัตถุประสงค์ของคำสั่งเหล่านั้น

ตัวอย่างคำตอบ: git fetch ดาวน์โหลดข้อมูลใหม่จากที่เก็บข้อมูลระยะไกลแต่ไม่รวมเข้าในสาขาปัจจุบันของคุณ git pull ดำเนินการดึงข้อมูลตามด้วยการรวมอัตโนมัติโดยบูรณาการข้อมูลใหม่ git merge ใช้เพื่อรวมการเปลี่ยนแปลงจากสาขาหนึ่งไปยังอีกสาขาหนึ่งด้วยตนเองหลังจากดึงข้อมูลอัปเดต


3) อธิบายสถานการณ์ที่คุณต้องแก้ไขข้อขัดแย้งในการผสาน คุณจัดการกับมันอย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการทราบเกี่ยวกับทักษะการแก้ไขข้อขัดแย้งและความสามารถในการจัดการเวิร์กโฟลว์การทำงานร่วมกันของคุณ

ตัวอย่างคำตอบ: ในบทบาทสุดท้ายของผม เรามักจะทำงานบนสาขาที่ใช้ร่วมกัน ซึ่งบางครั้งนำไปสู่ความขัดแย้งในการรวมสาขา เมื่อผมเจอปัญหาแบบนี้ ผมจึงใช้ git status เพื่อระบุไฟล์ที่ขัดแย้งกันและตรวจสอบทั้งสองเวอร์ชันเพื่อตัดสินใจว่าจะเก็บการเปลี่ยนแปลงใดไว้ หลังจากแก้ไขและทดสอบไฟล์แล้ว ฉันได้ทำเครื่องหมายว่าความขัดแย้งได้รับการแก้ไขแล้วและยืนยันการเปลี่ยนแปลง ฉันยังสื่อสารกับทีมเพื่อหลีกเลี่ยงปัญหาที่คล้ายกันในอนาคตโดยการปรับปรุงแนวทางปฏิบัติในการจัดการสาขา


4) คุณใช้กลยุทธ์การแยกสาขาใน Git ในการจัดการโครงการอย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการดูว่าคุณเข้าใจเวิร์กโฟลว์ที่มีโครงสร้าง เช่น Git Flow หรือการพัฒนาแบบ Trunk หรือไม่

ตัวอย่างคำตอบ: โดยทั่วไปฉันใช้กลยุทธ์ Git Flow ที่ประกอบด้วย main, developและสาขาคุณลักษณะ สาขาคุณลักษณะจะถูกสร้างขึ้นสำหรับงานใหม่แต่ละงาน และรวมเข้าเป็น develop หลังจากเสร็จสิ้นแล้วจึงทดสอบก่อนรวมเข้า mainวิธีการนี้ช่วยให้มั่นใจถึงการบูรณาการที่ควบคุมได้และรอบการปล่อยที่สะอาด


5) คุณจะดำเนินการอย่างไรหากคุณส่งข้อมูลสำคัญไปยังที่เก็บข้อมูล Git โดยไม่ได้ตั้งใจ?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์กำลังประเมินความสามารถของคุณในการตอบสนองต่อปัญหาความปลอดภัยหรือการปฏิบัติตามข้อกำหนดอย่างมีประสิทธิผล

ตัวอย่างคำตอบ: อันดับแรก ฉันจะลบไฟล์ที่ละเอียดอ่อนโดยใช้ git rm --cached และยืนยันการเปลี่ยนแปลง ต่อไปฉันจะใช้เครื่องมือเช่น git filter-branch or BFG Repo-Cleaner เพื่อลบข้อมูลออกจากประวัติ สุดท้ายนี้ ฉันจะหมุนเวียนข้อมูลประจำตัวที่เปิดเผยและแจ้งให้ผู้มีส่วนได้ส่วนเสียที่เกี่ยวข้องทราบเพื่อป้องกันความเสี่ยงที่อาจเกิดขึ้น


6) คุณจะมั่นใจได้อย่างไรว่าโค้ดมีความสอดคล้องกันเมื่อนักพัฒนาหลายคนทำการคอมมิทพร้อมๆ กัน?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการทำความเข้าใจว่าคุณรักษาความสมบูรณ์ของโค้ดในสภาพแวดล้อมการทำงานร่วมกันได้อย่างไร

ตัวอย่างคำตอบ: ในงานก่อนหน้านี้ของผม เราได้กำหนดนโยบายที่กำหนดให้ทุกคอมมิตต้องผ่าน Pull Request และการตรวจสอบโค้ด การตรวจสอบ CI อัตโนมัติช่วยให้มั่นใจได้ว่ามีเพียงโค้ดที่ผ่านการทดสอบและตรวจสอบแล้วเท่านั้นที่ถูกผสานรวมเข้าด้วยกัน วิธีนี้ช่วยรักษาคุณภาพและความสอดคล้องกันในทุกสาขา


7) คุณจะย้อนกลับการคอมมิตที่ถูกผลักไปยังสาขาที่แชร์แล้วได้อย่างไร

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

ตัวอย่างคำตอบ: วิธีที่ปลอดภัยที่สุดคือการใช้ git revert <commit_id>ซึ่งจะสร้างคอมมิตใหม่ที่ยกเลิกการเปลี่ยนแปลงจากคอมมิตที่ระบุ วิธีนี้จะช่วยรักษาประวัติโครงการและหลีกเลี่ยงการรบกวนนักพัฒนารายอื่น ซึ่งแตกต่างจาก git resetซึ่งจะเขียนประวัติศาสตร์ใหม่


8) บอกฉันเกี่ยวกับเวลาที่คุณต้องจัดการหลายสาขาสำหรับรุ่นที่แตกต่างกัน

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการข้อมูลเชิงลึกเกี่ยวกับความสามารถของคุณในการจัดการกับความซับซ้อนในการควบคุมเวอร์ชัน

ตัวอย่างคำตอบ: ในบทบาทก่อนหน้าของผม เราดูแลเวอร์ชันที่เผยแพร่หลายเวอร์ชันให้กับลูกค้า ผมใช้ Release Branch แยกกันสำหรับแต่ละเวอร์ชัน และแก้ไขจุดบกพร่องที่สำคัญโดยใช้ Cherry-pick วิธีนี้ช่วยให้มั่นใจได้ว่าการอัปเดตจะถูกนำมาใช้อย่างสม่ำเสมอโดยไม่เกิดปัญหาการถดถอยในเวอร์ชันใหม่


9) คุณจัดการกับที่เก็บข้อมูลขนาดใหญ่ที่มีผู้สนับสนุนจำนวนมากเพื่อให้ประสิทธิภาพการทำงานอยู่ในระดับที่เหมาะสมที่สุดได้อย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์กำลังประเมินความรู้ของคุณในการปรับขนาด Git อย่างมีประสิทธิภาพ

ตัวอย่างคำตอบ: ฉันสนับสนุนการโคลนนิ่งแบบตื้น (--depth) เพื่อการเข้าถึงและใช้งานได้รวดเร็วยิ่งขึ้น .gitignore เพื่อแยกไฟล์ที่ไม่จำเป็นออก เรายังตัดไฟล์เก่าออกเป็นประจำ และใช้ Git LFS (Large File Storage) สำหรับทรัพยากรไบนารี ขั้นตอนเหล่านี้ช่วยให้ที่เก็บมีประสิทธิภาพและจัดการได้ง่าย


10) อธิบายสถานการณ์ที่คุณต้องดีบักปัญหา Git ที่ทำให้การพัฒนาหยุดชะงัก คุณมีแนวทางอย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการดูทักษะการคิดวิเคราะห์และการแก้ไขปัญหาของคุณ

ตัวอย่างคำตอบ: ในตำแหน่งก่อนหน้านี้ ประวัติสาขาของสมาชิกในทีมเสียหายเนื่องจากการรีเบสที่ผิดพลาด ฉันได้ตรวจสอบโดยใช้ git log และ git reflog เพื่อติดตามปัญหา จากนั้น ฉันจึงคืนค่าคอมมิทที่ถูกต้องโดยใช้ git cherry-pick และมั่นใจว่าสาขาในพื้นที่ของทุกคนได้รับการซิงค์กับเวอร์ชันระยะไกลที่กำหนดไว้แล้ว วิธีนี้ช่วยป้องกันการหยุดชะงักเพิ่มเติมและรักษาประสิทธิภาพการทำงานของทีม

สรุปโพสต์นี้ด้วย: