จดบันทึกการเรียนรู้เรื่อง Git ตอนที่ 1

เนื่องจากผมเป็นพวกประเภทชอบเทคโนโลยีใหม่ๆและบางอย่างที่เขาใช้กันมานานอย่าง Git ผมเองก็รู้ว่ามันคือ File Version Control สำคัญมากสำหรับ Dev และ Design หากต้องทำงานร่วมกันแต่ทั้งๆที่มันเปิดมานานแล้วผมก็ไม่เข้าใจหลักการทำงานของมันจนกระทั่งวันนี้ว่างๆเลยไปศึกษาเพิ่มเติมครับ

มารู้จัก Git กันก่อน

Git คือตัวจัดการไฟล์แบบว่า สมมติว่าเราทำงานมีไฟล์หลายตัว แต่ละตัวเราก็ไม่รู้ว่าใครเข้าไปแก้ไขอะไรเพิ่มเติมหรือยัง หรือถ้าเราไปแก้ไขแล้วจะ save กลับไปจะทับกับไฟล์ชาวบ้านหรือเปล่า จึงเกิดเครื่องมือในการจัดเก็บและทำหน้าที่เปรียบเทียบไฟล์ว่ามันเหมือนหรือต่างกันไหม ? และอีกทั้งยังสามารถจดบันทึกเพื่อจะย้อนกลับไปยังไฟล์ตัวที่เราต้องการอีกด้วย อ่ะ … อาจจะงงยกตัวอย่างเลยแล้วกัน

สมมติว่าผมทำงานโดยมีไฟล์ดังนี้

  • index.html
  • welcome.js
  • style.css

แล้วผมเปิดไฟล์ index.html แล้วทำการโค้ดเพิ่มเติมลงไปในขณะที่เพื่อนผมอีกคนก็เปิดไฟล์ตัวเดียวกันแต่เพื่อนผมทำการ save ก่อน และผมเขียนโค้ดเพิ่งเสร็จ save ทีหลังผลคือ ไฟล์ index.html นั้นจะเป็นไฟล์จากเครื่องผม และของเพื่อนล่ะ ? แน่นอนหายสิครับรออะไร !! พอจะเห็นภาพกันเนอะ

เรียนรู้อะไรบ้างวันนี้

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

git commit คือ การสร้างไฟล์อีกเวอร์ชั่นหนึ่งต่อมาพร้อมๆเลื่อนการทำงานมาที่ไฟล์ตัวใหม่เช่นตอนแรกทำงานอยู่ที่ไฟล์ C0 พอสั่ง git commit ก็สร้างไฟล์ C1 ( จริงๆคือไฟล์ตัวเดิมแต่ git ทำการ save C0 ไว้เพื่อให้เราสามารถย้อนกลับมาได้ครับ )

index.html

C0 <—— C1

git branch [name] คือ การสร้างกิ่ง ( git พยายามให้เรามองเป็นต้นไม้ ) มีการต่อกิ่งไปทางอื่นได้เช่นเราสามารถจะต่อเติมแล้วตั้งชื่อใหม่ให้กับกิ่งที่เราเพิ่มขึ้นมาและมันจะไม่กระทบต่อไฟล์ตัวเดิมด้วยเช่น สมมติเรามีไฟล์ index.html ซึ่งตอนนี้เรามีสองเวอร์ชันคือ C0 และ C1 ที่ทำการ commit จากข้อเมื่อกี้ทีนี้เราต้องการจะลองเพิ่มเมนูแต่ก็ยังไม่แน่ใจว่าจะดีหรือไม่ดีและไม่อยากจะไฟล์ index.html มีปัญหาถ้าเพื่อนๆคนอื่นจะเอาไปแก้ไขเราก็ทำการแตก branch มาครับ

C0 <—- C1 <—– C2 ( addMenu* )

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

git checkout [name] คือ การย้ายการทำงานของเราไปยังกิ่งที่ต้องการเช่นจากข้อเมื่อกี้เราจะทำงานอยู่ที่กิ่ง C3 มีชื่อเรียกว่า addMenu แล้วเราอยากกลับไปทำงานที่กิ่ง C2 ก็สามารถพิมพ์ git checkout C2 อย่างนี้ก็ได้หรือหากเรามีกิ่งที่มีชื่อก็สามารถเรียกไปได้เหมือนกันเช่น git checkout addMenu เราก็จะย้ายมายังกิ่งที่ต้องการได้ครับ

git merge [branch name] คือ การรวมกันสองกิ่งหรือหลายๆกิ่งก็ได้ เช่น หากเราทำการแตกกิ่งไปโค้ดเพิ่มเมนูอย่างเมื่อกี้ที่ยกตัวอย่างแล้วเราทำเสร็จทุกอย่างเรียบร้อยเราก็เรียกให้โค้ดของตัว C1 สมมติว่าชื่อ master  มารวมกับโค้ดของกิ่งชื่อว่า addMenu แต่ขึ้นอยู่กับว่าคุณอยากต่อเติมต่อโดยจะไม่กระทบกับอันหลัก “master” หรือเปล่าหากอยากรวมโค้ดโดยไม่อยากให้ตัว master มีโค้ดของเราอยู่ก็ให้เราทำงานที่กิ่ง addMenu ก่อนครับพิมพ์ว่า git checkout addMenu หลังจากนั้นก็พิมพ์คำสั่งว่า git merge master เราก็จะได้ไฟล์ใหม่ที่รวมโค้ดของ master และ addMenu เข้าด้วยกันแหละทีนี้

สรุป

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

Credit : http://pcottle.github.io/learnGitBranching/

ถ้าคุณชอบบทความในเว็บนี้ และอยากสนับสนุนเรา เพียงแค่คุณสมัครรับข่าวสารด้านล่างจะได้รับสิทธิ์พิเศษก่อนใคร เราสัญญาว่าจะส่งบทความที่เป็นประโยชน์ต่อคุณอย่างแน่นอนครับ

Loading

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Message us

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

Privacy Preferences

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

ปฎิเสธทั้งหมด
Manage Consent Preferences
  • คุกกี้ที่จำเป็น
    Always Active

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

  • คุกกี้ที่จำเป็น

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

บันทึก