• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

การใช้งาน Git Rebase: คู่มือฉบับสมบูรณ์

Lomanu4 Оффлайн

Lomanu4

Команда форума
Администратор
Регистрация
1 Мар 2015
Сообщения
1,481
Баллы
155
บทนำ


Git เป็นระบบควบคุมเวอร์ชันที่ได้รับความนิยมอย่างมากในวงการพัฒนาซอฟต์แวร์ทั่วโลก หนึ่งในคำสั่งที่ทรงพลังแต่มักถูกเข้าใจผิดและใช้งานไม่เต็มประสิทธิภาพคือ git rebase คำสั่งนี้ช่วยให้นักพัฒนาสามารถจัดการประวัติการคอมมิต (commit history) ให้สะอาด เป็นเส้นตรง และเข้าใจง่ายขึ้น บทความนี้จะอธิบายเกี่ยวกับการใช้งาน Git Rebase อย่างละเอียดตั้งแต่พื้นฐานไปจนถึงเทคนิคขั้นสูง พร้อมยกตัวอย่างการใช้งานในสถานการณ์จริง

Git Rebase คืออะไร?


git rebase คือคำสั่งที่ใช้ในการเปลี่ยนจุดเริ่มต้น (base) ของสาขา (branch) จากคอมมิตหนึ่งไปยังอีกคอมมิตหนึ่ง โดยจะนำการเปลี่ยนแปลงที่อยู่ในสาขาของเรา (feature branch) ไปวางซ้อนทับบนปลายของสาขาเป้าหมาย (target branch) เสมือนว่าเราสร้างสาขาใหม่จากจุดปัจจุบันของสาขาเป้าหมายแล้วทำการเปลี่ยนแปลงเดิมซ้ำอีกครั้ง

ความแตกต่างหลักระหว่าง merge และ rebase คือ:

  • merge จะสร้างคอมมิตใหม่ที่รวมการเปลี่ยนแปลงจากทั้งสองสาขา ส่งผลให้เกิด merge commit
  • rebase จะย้ายคอมมิตของสาขาเราไปต่อท้ายสาขาเป้าหมาย ทำให้ประวัติคอมมิตเป็นเส้นตรง สะอาด และไม่มี merge commit
รูปแบบพื้นฐานของคำสั่ง Git Rebase


git rebase <สาขาเป้าหมาย>

ตัวอย่างเช่น เมื่อคุณทำงานในสาขา feature และต้องการ rebase กับสาขา main ที่อัพเดทล่าสุด:


git checkout feature
git rebase main
วิธีการใช้งาน Git Rebase อย่างละเอียด

1. การ Rebase พื้นฐาน


สมมติว่าคุณมีสถานการณ์ดังนี้:


A---B---C (feature)
/
D---E---F---G (main)

เมื่อคุณรัน git checkout feature ตามด้วย git rebase main คุณจะได้:


A'--B'--C' (feature)
/
D---E---F---G (main)

คอมมิต A, B, และ C จะถูกสร้างใหม่เป็น A', B', และ C' โดยมีฐานเป็นคอมมิต G แทน

2. Interactive Rebase


Interactive rebase เป็นเครื่องมือที่ทรงพลังมากสำหรับการจัดการประวัติคอมมิต คุณสามารถใช้มันเพื่อ:

  • รวมหลายคอมมิตเข้าด้วยกัน (squash)
  • แก้ไขข้อความคอมมิต (reword)
  • ลบคอมมิตที่ไม่ต้องการ (drop)
  • แยกคอมมิตออกเป็นส่วนย่อย (split)
  • เรียงลำดับคอมมิตใหม่ (reorder)

วิธีใช้:


git rebase -i <commit-hash หรือ HEAD~n>

เช่น เพื่อแก้ไข 3 คอมมิตล่าสุด:


git rebase -i HEAD~3

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


pick 2231360 เพิ่มฟีเจอร์การล็อกอิน
pick 3f5b85c แก้บัก UI
pick a92f124 อัพเดทเอกสาร

# คำสั่งที่เป็นไปได้:
# p, pick = ใช้คอมมิต
# r, reword = ใช้คอมมิตแต่แก้ไขข้อความ
# e, edit = ใช้คอมมิตแต่ต้องการแก้ไขเพิ่มเติม
# s, squash = ใช้คอมมิตแต่รวมกับคอมมิตก่อนหน้า
# f, fixup = เหมือน squash แต่ไม่เก็บข้อความคอมมิต
# x, exec = รันคำสั่งโดยใช้ shell
# d, drop = ลบคอมมิต
3. การแก้ไขความขัดแย้ง (Conflict Resolution)


บางครั้งการ rebase อาจก่อให้เกิดความขัดแย้ง (conflict) เมื่อการเปลี่ยนแปลงในสาขาของคุณขัดแย้งกับการเปลี่ยนแปลงในสาขาเป้าหมาย

ขั้นตอนการแก้ไขความขัดแย้ง:

  1. Git จะหยุด rebase และแจ้งให้คุณทราบว่ามีความขัดแย้ง
  2. ทำการแก้ไขไฟล์ที่มีความขัดแย้ง (Git จะทำเครื่องหมายส่วนที่ขัดแย้งไว้)
  3. เมื่อแก้ไขเสร็จแล้ว ให้ใช้คำสั่ง git add <ไฟล์ที่แก้ไขแล้ว>
  4. ดำเนินการ rebase ต่อด้วยคำสั่ง git rebase --continue
  5. หากต้องการยกเลิกการ rebase ใช้คำสั่ง git rebase --abort
4. การใช้ --onto ในการ Rebase


--onto เป็นตัวเลือกขั้นสูงที่ช่วยให้คุณสามารถระบุจุดปลายทางที่แน่นอนสำหรับการ rebase:


git rebase --onto <newbase> <oldbase> <branch>

ตัวอย่างเช่น สมมติว่าคุณมีโครงสร้างสาขาดังนี้:


A---B---C---D---E (feature)
/
X---Y---Z (main)

หากคุณต้องการย้ายเฉพาะคอมมิต D และ E ไปที่สาขา main:


git rebase --onto main C feature

ผลลัพธ์จะเป็น:


A---B---C
/
X---Y---Z---D'---E' (feature)
(main)
แนวปฏิบัติที่ดีในการใช้งาน Git Rebase

1. อย่า Rebase สาขาสาธารณะ


กฎทองของการ rebase คือ: อย่า rebase สาขาที่มีการแชร์กับผู้อื่นแล้ว เพราะการ rebase จะเปลี่ยน commit hash ทั้งหมด ทำให้ประวัติที่ผู้อื่นมีไม่ตรงกันกับของคุณ นำไปสู่ความสับสนและปัญหาในการทำงานร่วมกัน

ใช้ rebase เฉพาะกับ:

  • สาขาส่วนตัวที่ยังไม่ได้ push ไปยัง remote repository
  • สาขาที่คุณทำงานคนเดียว และเข้าใจผลกระทบของการ rebase
2. ทำการ Pull และ Update สาขาหลักอย่างสม่ำเสมอ


เพื่อลดโอกาสเกิดความขัดแย้ง ควรอัพเดทสาขาหลัก (เช่น main หรือ develop) อยู่เสมอและทำการ rebase สาขาของคุณกับสาขาหลักที่อัพเดทล่าสุด:


git checkout main
git pull
git checkout feature-branch
git rebase main
3. ใช้ Interactive Rebase ก่อนการ Push


ก่อนที่จะ push งานของคุณ ควรใช้ interactive rebase เพื่อจัดการกับประวัติคอมมิตให้สะอาด:


git rebase -i origin/main

จากนั้นทำการ:

  • รวม (squash) คอมมิตที่เกี่ยวข้องกัน
  • แก้ไขข้อความคอมมิตให้ชัดเจน
  • ลบคอมมิตชั่วคราวหรือไม่สำคัญ
4. บันทึกงานก่อนการ Rebase เสมอ


เนื่องจาก rebase เป็นการปรับเปลี่ยนประวัติ จึงมีความเสี่ยงที่จะเกิดความผิดพลาด ควรสำรองงานของคุณก่อนทำการ rebase ซึ่งสามารถทำได้หลายวิธี:


# สร้างสาขาสำรองก่อน rebase
git branch backup-feature feature

# หรือใช้ git stash หากมีการเปลี่ยนแปลงที่ยังไม่ได้คอมมิต
git stash
ตัวอย่างการใช้งานในสถานการณ์จริง

สถานการณ์ 1: การอัพเดทสาขาฟีเจอร์ให้ทันสมัย


# อัพเดทสาขา main
git checkout main
git pull

# rebase สาขาฟีเจอร์กับ main
git checkout feature
git rebase main
สถานการณ์ 2: การทำให้ประวัติคอมมิตสะอาดก่อนสร้าง Pull Request


# รวมคอมมิตที่เกี่ยวข้องเข้าด้วยกันและทำให้ประวัติสะอาด
git rebase -i HEAD~5 # สมมติว่ามี 5 คอมมิตที่ต้องการจัดการ

# จากนั้น push แบบ force (ระวัง!)
git push --force-with-lease
สถานการณ์ 3: การย้ายฟีเจอร์ไปยังสาขาที่ถูกต้อง


สมมติว่าคุณเริ่มพัฒนาฟีเจอร์ใหม่บนสาขาที่ผิด (เช่น develop แทนที่จะเป็น feature/new-login):


# สร้างสาขาฟีเจอร์ใหม่จากตำแหน่งปัจจุบัน
git checkout -b feature/new-login

# ย้อนกลับไปยังคอมมิตก่อนที่จะเริ่มพัฒนาฟีเจอร์
git checkout develop
git reset --hard HEAD~3 # สมมติว่าคุณเพิ่ม 3 คอมมิตเกี่ยวกับฟีเจอร์ใหม่

# หรือใช้ git rebase --onto
git rebase --onto develop HEAD~3 feature/new-login
สรุป


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

ประโยชน์หลักของการใช้ rebase:

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

เพียงจำไว้ว่า: อย่า rebase สาขาที่แชร์กับผู้อื่นแล้ว และเตรียมพร้อมสำหรับการแก้ไขความขัดแย้งในระหว่างการ rebase เสมอ

การฝึกฝนและทดลองใช้งาน Git Rebase ในโปรเจคส่วนตัวจะช่วยให้คุณคุ้นเคยและมั่นใจในการใช้คำสั่งนี้กับโปรเจคที่ใหญ่ขึ้น

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


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

 
Вверх Снизу