1. คำแนะนำโดยละเอียดเกี่ยวกับ Git สำหรับผู้เริ่มต้น
วันนี้เราจะพูดถึงระบบควบคุมเวอร์ชันที่เรียกว่า Git
คุณไม่สามารถเป็นโปรแกรมเมอร์ที่เต็มเปี่ยมได้หากไม่รู้จักและเข้าใจเครื่องมือนี้ แน่นอน คุณไม่จำเป็นต้องเก็บคำสั่งและคุณลักษณะทั้งหมดของ Git ไว้ในหัวเพื่อที่จะใช้งานได้อย่างต่อเนื่อง คุณจำเป็นต้องรู้ชุดคำสั่งที่จะช่วยให้คุณเข้าใจทุกสิ่งที่เกิดขึ้น
พื้นฐาน Git
Git คือระบบควบคุมเวอร์ชันแบบกระจายสำหรับโค้ดของเรา ทำไมเราต้องการมัน? ทีมต้องการระบบบางอย่างในการจัดการงานของพวกเขา จำเป็นต้องติดตามการเปลี่ยนแปลงที่เกิดขึ้นเมื่อเวลาผ่านไป
นั่นคือเราต้องสามารถเห็นทีละขั้นตอนว่าไฟล์ใดมีการเปลี่ยนแปลงและอย่างไร นี่เป็นสิ่งสำคัญอย่างยิ่งเมื่อคุณตรวจสอบสิ่งที่เปลี่ยนแปลงในบริบทของงานเดียว ทำให้สามารถย้อนกลับการเปลี่ยนแปลงได้
ลองนึกภาพสถานการณ์ต่อไปนี้: เรามีโค้ดที่ใช้งานได้ ทุกอย่างในนั้นดี แต่จากนั้นเราตัดสินใจปรับปรุงหรือปรับแต่งบางอย่าง ไม่ใช่เรื่องใหญ่ แต่ "การปรับปรุง" ของเราได้ทำลายคุณลักษณะของโปรแกรมไปครึ่งหนึ่งและทำให้ไม่สามารถทำงานได้ แล้วตอนนี้ล่ะ? หากไม่มี Git คุณจะต้องนั่งครุ่นคิดอยู่หลายชั่วโมง พยายามจดจำว่าเดิมทีทุกอย่างเป็นอย่างไร แต่ด้วย Git เราเพียงแค่ย้อนกลับการคอมมิต — แค่นั้น
หรือจะเป็นอย่างไรหากมีนักพัฒนาสองคนทำการเปลี่ยนแปลงโค้ดของตนเองพร้อมกัน หากไม่มี Git ก็จะคัดลอกไฟล์โค้ดต้นฉบับและแก้ไขแยกกัน มีเวลาที่ทั้งคู่ต้องการเพิ่มการเปลี่ยนแปลงในไดเร็กทอรีหลัก คุณจะทำอย่างไรในกรณีนี้?
จะไม่มีปัญหาดังกล่าวหากคุณใช้ Git
การติดตั้ง Git
มาติดตั้ง Java บนคอมพิวเตอร์ของคุณกันเถอะ กระบวนการนี้แตกต่างกันเล็กน้อยสำหรับระบบปฏิบัติการที่แตกต่างกัน
การติดตั้งบน Windows
ตามปกติ คุณต้องดาวน์โหลดและเรียกใช้ไฟล์ exe ทุกอย่างง่ายที่นี่: คลิกที่ลิงค์แรกของ Googleทำการติดตั้ง เท่านี้ก็เรียบร้อย ในการทำเช่นนี้ เราจะใช้ bash Console ที่ Windows จัดเตรียมไว้ให้
ใน Windows คุณต้องเรียกใช้ Git Bash นี่คือลักษณะที่ปรากฏในเมนูเริ่ม:
นี่คือพรอมต์คำสั่งที่คุณสามารถใช้งานได้
เพื่อหลีกเลี่ยงการต้องไปที่โฟลเดอร์ที่มีโปรเจ็กต์ทุกครั้งเพื่อเปิด Git ที่นั่น คุณสามารถเปิดพรอมต์คำสั่งในโฟลเดอร์โปรเจ็กต์ด้วยปุ่มเมาส์ขวาพร้อมพาธที่เราต้องการ:
การติดตั้งบน Linux
โดยปกติแล้ว Git จะเป็นส่วนหนึ่งของลีนุกซ์ดิสทริบิวชั่นและติดตั้งไว้แล้ว เนื่องจากมันเป็นเครื่องมือที่เดิมเขียนขึ้นสำหรับการพัฒนาเคอร์เนลของลินุกซ์ แต่มีบางสถานการณ์ที่ไม่เป็นเช่นนั้น ในการตรวจสอบ คุณต้องเปิดเทอร์มินัลแล้วเขียน: git --version หากคุณได้รับคำตอบที่เข้าใจได้ ก็ไม่จำเป็นต้องติดตั้งอะไร
เปิดเทอร์มินัลและติดตั้ง สำหรับ Ubuntu คุณต้องเขียน: sudo apt-get install git เท่านี้ก็เรียบร้อย ตอนนี้คุณสามารถใช้ Git ในเทอร์มินัลใดก็ได้
การติดตั้งบน macOS
ก่อนอื่นคุณต้องตรวจสอบว่ามี Git อยู่แล้วหรือไม่ (ดูด้านบนเหมือนกับบน Linux)
หากคุณยังไม่มี วิธีที่ง่ายที่สุดในการดาวน์โหลดคือดาวน์โหลดเวอร์ชันล่าสุด หากติดตั้ง Xcode แล้ว Git จะถูกติดตั้งโดยอัตโนมัติอย่างแน่นอน
การตั้งค่าคอมไพล์
Git มีการตั้งค่าผู้ใช้สำหรับผู้ใช้ที่จะส่งงาน สิ่งนี้สมเหตุสมผลและจำเป็น เนื่องจาก Git นำข้อมูลนี้ไปใช้ในฟิลด์ Author เมื่อมีการสร้างคอมมิต
ตั้งค่าชื่อผู้ใช้และรหัสผ่านสำหรับโครงการทั้งหมดของคุณโดยเรียกใช้คำสั่งต่อไปนี้:
หากคุณต้องการเปลี่ยนผู้เขียนสำหรับโครงการใดโครงการหนึ่ง (เช่น โครงการส่วนบุคคล) คุณสามารถลบ "--global" ได้ สิ่งนี้จะทำให้เราได้สิ่งต่อไปนี้:
ทฤษฎีเล็กน้อย
ในการดำดิ่งสู่หัวข้อนี้ เราควรแนะนำคุณเกี่ยวกับคำศัพท์และการกระทำใหม่ๆ สองสามคำ... มิฉะนั้นจะไม่มีอะไรให้พูดถึง แน่นอนว่านี่เป็นศัพท์แสงที่มาจากภาษาอังกฤษ ดังนั้นฉันจะเพิ่มคำแปลในวงเล็บ
คำพูดและการกระทำใด
- ที่เก็บคอมไพล์
- ให้สัญญา
- สาขา
- ผสาน
- ความขัดแย้ง
- ดึง
- ดัน
- วิธีละเว้นบางไฟล์ (.gitignore)
และอื่น ๆ
สถานะใน Git
Git มีรูปปั้นหลายอย่างที่ต้องเข้าใจและจดจำ:
- ไม่ได้ติดตาม
- แก้ไข
- จัดฉาก
- มุ่งมั่น
คุณควรเข้าใจเรื่องนี้อย่างไร?
นี่คือสถานะที่ใช้กับไฟล์ที่มีรหัสของเรา กล่าวอีกนัยหนึ่ง วงจรชีวิตของพวกมันมักจะมีลักษณะดังนี้:
- ไฟล์ที่สร้างขึ้นแต่ยังไม่ได้เพิ่มไปยังที่เก็บมีสถานะ "ไม่ถูกติดตาม"
- เมื่อเราทำการเปลี่ยนแปลงไฟล์ที่เพิ่มไปยังที่เก็บ Git แล้ว สถานะของไฟล์จะเป็น "แก้ไข"
- ในบรรดาไฟล์ที่เราเปลี่ยนแปลง เราเลือกไฟล์ที่เราต้องการ (เช่น เราไม่ต้องการคลาสที่คอมไพล์แล้ว) และคลาสเหล่านี้จะเปลี่ยนเป็นสถานะ "จัดฉาก"
- การคอมมิตถูกสร้างขึ้นจากไฟล์ที่เตรียมไว้ในสถานะสเตจและไปที่ที่เก็บ Git หลังจากนั้น จะไม่มีไฟล์ที่มีสถานะ "จัดฉาก" แต่อาจมีไฟล์ที่มีสถานะ "แก้ไข"
นี่คือลักษณะ:
คอมมิตคืออะไร?
คอมมิชชันเป็นเหตุการณ์หลักเมื่อพูดถึงการควบคุมเวอร์ชัน ประกอบด้วยการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นตั้งแต่การคอมมิตเริ่มต้นขึ้น คอมมิชชันจะเชื่อมโยงเข้าด้วยกันเหมือนรายการที่เชื่อมโยงรายการเดียว
โดยเฉพาะอย่างยิ่ง มีการกระทำครั้งแรก เมื่อคอมมิทที่สองถูกสร้างขึ้น มัน (อันที่สอง) จะรู้ว่าอะไรจะเกิดขึ้นหลังจากอันแรก และในลักษณะนี้สามารถติดตามข้อมูลได้
นอกจากนี้ การคอมมิตยังมีข้อมูลของตัวเองอีกด้วย ซึ่งเรียกว่าข้อมูลเมตา:
- ตัวระบุเฉพาะของคอมมิชชัน ซึ่งสามารถใช้ค้นหาได้
- ชื่อของผู้เขียนคอมมิท ผู้สร้างมันขึ้นมา
- วันที่สร้างคอมมิท
- ความคิดเห็นที่อธิบายถึงสิ่งที่ทำระหว่างการกระทำ
นี่คือลักษณะ:
สาขาคืออะไร?
สาขาเป็นตัวชี้ไปยังการกระทำบางอย่าง เนื่องจากการคอมมิตรู้ว่าคอมมิชชันใดอยู่ก่อนหน้า เมื่อสาขาชี้ไปที่คอมมิชชัน คอมมิชชันก่อนหน้านี้ทั้งหมดจะมีผลกับคอมมิตนั้นด้วย
ดังนั้น เราสามารถพูดได้ว่าคุณสามารถมีสาขาได้มากเท่าที่คุณต้องการโดยชี้ไปที่การกระทำเดียวกัน
งานเกิดขึ้นในสาขา ดังนั้นเมื่อมีการสร้างคอมมิชชันใหม่ สาขาจะย้ายตัวชี้ไปยังคอมมิชชันล่าสุด
เริ่มต้นใช้งาน Git
คุณสามารถทำงานกับที่เก็บข้อมูลในเครื่องเพียงอย่างเดียวเช่นเดียวกับรีโมต
หากต้องการฝึกใช้คำสั่งที่จำเป็น คุณสามารถจำกัดตัวเองไว้ที่ที่เก็บในเครื่อง โดยจะเก็บข้อมูลทั้งหมดของโครงการไว้ในโฟลเดอร์ .git เท่านั้น
หากเรากำลังพูดถึงพื้นที่เก็บข้อมูลระยะไกล ข้อมูลทั้งหมดจะถูกเก็บไว้ที่ใดที่หนึ่งบนเซิร์ฟเวอร์ระยะไกล: เฉพาะสำเนาของโครงการเท่านั้นที่จัดเก็บไว้ในเครื่อง การเปลี่ยนแปลงที่ทำกับสำเนาในเครื่องของคุณสามารถพุช (git push) ไปยังที่เก็บระยะไกลได้
ในการสนทนาของเราที่นี่และด้านล่าง เรากำลังพูดถึงการทำงานกับ Git ในคอนโซล แน่นอน คุณสามารถใช้โซลูชันที่ใช้ GUI บางประเภทได้ (เช่น IntelliJ IDEA) แต่ก่อนอื่น คุณควรทราบก่อนว่าคำสั่งใดถูกเรียกใช้งานและความหมายของคำสั่งเหล่านั้น
ทำงานกับ Git ในที่เก็บในเครื่อง
ในการสร้างที่เก็บในเครื่อง คุณต้องเขียน:
สิ่งนี้จะสร้างโฟลเดอร์ .git ที่ซ่อนอยู่ในไดเร็กทอรีปัจจุบันของคอนโซล
โฟลเดอร์ .git เก็บข้อมูลทั้งหมดเกี่ยวกับที่เก็บ Git อย่าลบนะ ;)
ถัดไป ไฟล์จะถูกเพิ่มในโครงการ และกำหนดสถานะเป็น "Untracked" หากต้องการตรวจสอบสถานะปัจจุบันของงานของคุณ ให้เขียนสิ่งนี้:
เราอยู่ในสาขาหลัก และเราจะอยู่ที่นี่จนกว่าเราจะเปลี่ยนไปใช้สาขาอื่น
นี่แสดงว่าไฟล์ใดมีการเปลี่ยนแปลงแต่ยังไม่ได้เพิ่มในสถานะ "staged" หากต้องการเพิ่มลงในสถานะ "จัดฉาก" คุณต้องเขียน "git add" เรามีตัวเลือกบางอย่างที่นี่ เช่น:
- git add -A — เพิ่มไฟล์ทั้งหมดในสถานะ "staged"
- คอมไพล์เพิ่ม . — เพิ่มไฟล์ทั้งหมดจากโฟลเดอร์นี้และโฟลเดอร์ย่อยทั้งหมด โดยพื้นฐานแล้วเหมือนกับก่อนหน้านี้
- git add <file name> — เพิ่มไฟล์ที่ต้องการ ที่นี่คุณสามารถใช้นิพจน์ทั่วไปเพื่อเพิ่มไฟล์ตามรูปแบบบางอย่างได้ ตัวอย่างเช่น git add *.java: หมายความว่าคุณต้องการเพิ่มไฟล์ที่มีนามสกุล java เท่านั้น
สองตัวเลือกแรกนั้นง่ายอย่างชัดเจน สิ่งที่น่าสนใจยิ่งขึ้นด้วยการเพิ่มล่าสุด ดังนั้นมาเขียน:
ในการตรวจสอบสถานะเราใช้คำสั่งที่เรารู้จักแล้ว:
ที่นี่คุณจะเห็นว่านิพจน์ทั่วไปทำงานได้อย่างถูกต้อง: ขณะนี้ test_resource.txt มีสถานะเป็น "staged"
และสุดท้าย ขั้นตอนสุดท้ายสำหรับการทำงานกับที่เก็บในเครื่อง (ยังมีอีกขั้นตอนหนึ่งเมื่อทำงานกับที่เก็บระยะไกล ;)) — การสร้างคอมมิชชันใหม่:
ถัดไปเป็นคำสั่งที่ดีสำหรับการดูประวัติการกระทำในสาขา มาใช้ประโยชน์จากมันกันเถอะ:
ที่นี่คุณจะเห็นว่าเราได้สร้างคอมมิชชันแรกของเราและรวมถึงข้อความที่เราให้ไว้ในบรรทัดคำสั่ง สิ่งสำคัญคือต้องเข้าใจว่าข้อความนี้ควรอธิบายอย่างถูกต้องที่สุดเท่าที่จะเป็นไปได้ว่าได้ทำอะไรไประหว่างการกระทำนี้ สิ่งนี้จะช่วยเราได้หลายครั้งในอนาคต
ผู้อ่านที่อยากรู้อยากเห็นที่ยังไม่หลับอาจสงสัยว่าเกิดอะไรขึ้นกับไฟล์ GitTest.java มาดูกันตอนนี้ ในการทำเช่นนี้ เราใช้:
อย่างที่คุณเห็น มันยังคง "ไม่ถูกติดตาม" และกำลังรออยู่ในปีก แต่ถ้าเราไม่ต้องการเพิ่มในโครงการเลยล่ะ บางครั้งก็เกิดขึ้น
เพื่อให้สิ่งต่าง ๆ น่าสนใจยิ่งขึ้น มาลองเปลี่ยนไฟล์ test_resource.txt กัน มาเพิ่มข้อความที่นั่นและตรวจสอบสถานะ:
ที่นี่ คุณจะเห็นความแตกต่างระหว่างสถานะ "ไม่ได้ติดตาม" และ "แก้ไข" ได้อย่างชัดเจน
GitTest.java เป็น "ไม่ได้ติดตาม" ในขณะที่ test_resource.txt เป็น "แก้ไข"
ตอนนี้เรามีไฟล์ในสถานะแก้ไขแล้ว เราสามารถตรวจสอบการเปลี่ยนแปลงที่เกิดขึ้นกับไฟล์เหล่านั้นได้ สามารถทำได้โดยใช้คำสั่งต่อไปนี้:
นั่นคือคุณสามารถเห็นสิ่งที่ฉันเพิ่มลงในไฟล์ข้อความของเราได้อย่างชัดเจนที่นี่: สวัสดีชาวโลก!
มาเพิ่มการเปลี่ยนแปลงของเราในไฟล์ข้อความและสร้างคอมมิท:
หากต้องการดูคอมมิชชันทั้งหมด ให้เขียน:
อย่างที่คุณเห็น ตอนนี้เรามีสองคอมมิชชัน
เราจะเพิ่ม GitTest.java ด้วยวิธีเดียวกัน ไม่มีความคิดเห็นที่นี่ เพียงคำสั่ง:
ทำงานกับ .gitignore
เห็นได้ชัดว่าเราต้องการเก็บซอร์สโค้ดเพียงอย่างเดียวและไม่ต้องการอย่างอื่นในที่เก็บข้อมูล แล้วจะมีอะไรอีก? อย่างน้อยที่สุด คอมไพล์คลาสและ/หรือไฟล์ที่สร้างโดยสภาพแวดล้อมการพัฒนา
ในการบอกให้ Git เพิกเฉย เราต้องสร้างไฟล์พิเศษ ทำสิ่งนี้: สร้างไฟล์ชื่อ .gitignore ในรูทของโปรเจ็กต์ แต่ละบรรทัดในไฟล์นี้แสดงถึงรูปแบบที่จะละเว้น
ในตัวอย่างนี้ ไฟล์ .gitignore จะมีลักษณะดังนี้:
เป้าหมาย/
*.iml
.idea/
ลองดู:
- บรรทัดแรกคือการละเว้นไฟล์ทั้งหมดที่มีนามสกุล .class
- บรรทัดที่สองคือการละเว้นโฟลเดอร์ "เป้าหมาย" และทุกอย่างที่อยู่ในนั้น
- บรรทัดที่สามคือการละเว้นไฟล์ทั้งหมดที่มีนามสกุล .iml
- บรรทัดที่สี่คือการละเว้นโฟลเดอร์ .idea
ลองใช้ตัวอย่างกัน หากต้องการดูวิธีการทำงาน ให้เพิ่ม GitTest.class ที่คอมไพล์แล้วลงในโปรเจ็กต์และตรวจสอบสถานะโปรเจ็กต์:
เห็นได้ชัดว่าเราไม่ต้องการเพิ่มคลาสที่คอมไพล์แล้วในโครงการโดยไม่ตั้งใจ (โดยใช้ git add -A) ในการทำเช่นนี้ ให้สร้างไฟล์ .gitignore และเพิ่มทุกอย่างที่อธิบายไว้ก่อนหน้านี้:
ตอนนี้ให้ใช้การยืนยันเพื่อเพิ่มไฟล์ .gitignore ในโครงการ:
และตอนนี้เป็นช่วงเวลาแห่งความจริง: เรามีคลาส GitTest.class ที่คอมไพล์แล้วซึ่ง "ไม่ติดตาม" ซึ่งเราไม่ต้องการเพิ่มในที่เก็บ Git
ตอนนี้เราควรเห็นผลกระทบของไฟล์ .gitignore:
สมบูรณ์แบบ! .gitignore +1 :)
ทำงานกับสาขา
โดยปกติแล้ว การทำงานในสาขาเดียวนั้นไม่สะดวกสำหรับนักพัฒนาคนเดียว และเป็นไปไม่ได้เมื่อมีมากกว่าหนึ่งคนในทีม นี่คือเหตุผลที่เรามีสาขา
สาขาเป็นเพียงตัวชี้ที่เคลื่อนย้ายได้เพื่อกระทำ
ในส่วนนี้ เราจะสำรวจการทำงานในสาขาต่างๆ: วิธีผสานการเปลี่ยนแปลงจากสาขาหนึ่งไปยังอีกสาขาหนึ่ง ความขัดแย้งที่อาจเกิดขึ้น และอื่นๆ อีกมากมาย
หากต้องการดูรายชื่อสาขาทั้งหมดในที่เก็บและเข้าใจว่าคุณอยู่สาขาใด คุณต้องเขียน:
คุณจะเห็นว่าเรามีสาขาหลักเพียงแห่งเดียว เครื่องหมายดอกจันข้างหน้าแสดงว่าเราอยู่ในนั้น คุณยังสามารถใช้คำสั่ง "git status" เพื่อดูว่าเราอยู่ในสาขาใด
จากนั้นมีตัวเลือกมากมายสำหรับการสร้างสาขา (อาจมีมากกว่านี้ — นี่คือตัวเลือกที่ฉันใช้):
- สร้างสาขาใหม่ตามสาขาที่เราอยู่ (99% ของกรณี)
- สร้างสาขาตามการกระทำเฉพาะ (1% ของกรณี)
มาสร้างสาขาตามการกระทำเฉพาะ
เราจะใช้ตัวระบุเฉพาะของการกระทำ เพื่อค้นหาเราเขียน:
เราได้เน้นการกระทำด้วยความคิดเห็น "เพิ่มสวัสดีชาวโลก..." ตัวระบุเฉพาะของมันคือ 6c44e53d06228f888f2f454d3cb8c1c976dd73f8 เราต้องการสร้างสาขา "การพัฒนา" ที่เริ่มต้นจากการกระทำนี้ ในการทำเช่นนี้ เราเขียน:
สาขาถูกสร้างขึ้นโดยมีเพียงสองรายการแรกจากสาขาหลัก ในการตรวจสอบสิ่งนี้ ขั้นแรกเราต้องแน่ใจว่าได้เปลี่ยนไปใช้สาขาอื่นแล้วดูจำนวนคอมมิชชันที่นั่น:
และตามที่คาดไว้ เรามีสองคอมมิชชัน อย่างไรก็ตาม ประเด็นที่น่าสนใจก็คือ ยังไม่มีไฟล์ .gitignore ในสาขานี้ ดังนั้นไฟล์ที่คอมไพล์แล้ว (GitTest.class) จึงถูกเน้นด้วยสถานะ "ไม่ติดตาม"
ตอนนี้เราสามารถตรวจสอบสาขาของเราอีกครั้งโดยเขียนสิ่งนี้:
คุณจะเห็นว่ามีสองสาขา: "ต้นแบบ" และ "การพัฒนา" ขณะนี้เรากำลังอยู่ในระหว่างการพัฒนา
มาสร้างสาขาตามสาขาปัจจุบันกันเถอะ
วิธีที่สองในการสร้างสาขาคือสร้างจากสาขาอื่น เราต้องการสร้างสาขาตามสาขาหลัก ขั้นแรก เราต้องเปลี่ยนไปใช้มัน และขั้นตอนต่อไปคือการสร้างใหม่ ลองดู:
- git checkout master — เปลี่ยนเป็นสาขาหลัก
- git status — ยืนยันว่าเราอยู่ใน master branch จริงๆ
ที่นี่คุณจะเห็นว่าเราเปลี่ยนไปใช้สาขาหลัก ไฟล์ .gitignore มีผลบังคับใช้ และคลาสที่คอมไพล์แล้วจะไม่เน้นเป็น "untracked" อีกต่อไป
ตอนนี้เราสร้างสาขาใหม่ตามสาขาหลัก:
หากคุณไม่แน่ใจว่าสาขานี้เหมือนกับ "master" หรือไม่ คุณสามารถตรวจสอบได้ง่ายๆ โดยดำเนินการ "git log" และดูที่คอมมิชชันทั้งหมด ควรมีสี่คน
แก้ปัญหาความขัดแย้ง
ก่อนที่เราจะสำรวจว่าความขัดแย้งคืออะไร เราต้องพูดถึงการรวมสาขาหนึ่งเข้ากับอีกสาขาหนึ่ง
ภาพนี้แสดงขั้นตอนการรวมสาขาหนึ่งเข้ากับอีกสาขาหนึ่ง:
ที่นี่เรามีสาขาหลัก ในบางจุด สาขารองจะถูกสร้างขึ้นจากสาขาหลักและแก้ไขแล้ว เมื่อทำงานเสร็จแล้ว เราต้องรวมสาขาหนึ่งเข้ากับอีกสาขาหนึ่ง
ในตัวอย่างของเรา เราได้สร้างสาขาของฟีเจอร์/อัพเดต-txt-ไฟล์ ตามชื่อสาขา เรากำลังปรับปรุงข้อความ
ตอนนี้เราต้องสร้างคอมมิชชันใหม่สำหรับงานนี้:
ตอนนี้ หากเราต้องการรวมสาขาของ feature/update-txt-files เข้ากับ master เราต้องไปที่ master และเขียน "git merge feature/update-txt-files":
ด้วยเหตุนี้ มาสเตอร์แบรนช์จึงมีคอมมิชชันที่เพิ่มไปยังไฟล์ฟีเจอร์/อัปเดต-txt-
ฟังก์ชันนี้ถูกเพิ่มเข้ามา คุณจึงสามารถลบฟีเจอร์สาขาได้ ในการทำเช่นนี้ เราเขียน:
มาทำให้สถานการณ์ซับซ้อนขึ้น: ตอนนี้สมมติว่าคุณต้องเปลี่ยนไฟล์ txt อีกครั้ง แต่ตอนนี้ไฟล์นี้จะถูกเปลี่ยนในสาขาหลักเช่นกัน กล่าวอีกนัยหนึ่งก็จะเปลี่ยนขนานกันไป Git จะไม่สามารถทราบได้ว่าต้องทำอย่างไรเมื่อเราต้องการรวมรหัสใหม่ของเราเข้ากับสาขาหลัก
เราจะสร้างสาขาใหม่ตามต้นแบบ ทำการเปลี่ยนแปลง text_resource.txt และสร้างการคอมมิตสำหรับงานนี้:
... เราทำการเปลี่ยนแปลงไฟล์
ไปที่สาขาหลักและอัปเดตไฟล์ข้อความนี้ในบรรทัดเดียวกับในสาขาคุณลักษณะ:
… เราอัปเดต test_resource.txt
และตอนนี้จุดที่น่าสนใจที่สุด: เราจำเป็นต้องรวมการเปลี่ยนแปลงจากสาขาคุณลักษณะ/ส่วนหัวของส่วนเสริมเข้ากับต้นแบบ เราอยู่ในสาขาหลัก ดังนั้นเราต้องเขียน:
แต่ผลลัพธ์จะขัดแย้งกันในไฟล์ test_resource.txt:
ที่นี่เราจะเห็นว่า Git ไม่สามารถตัดสินใจได้เองว่าจะรวมรหัสนี้อย่างไร มันบอกเราว่าเราต้องแก้ไขข้อขัดแย้งก่อน แล้วจึงดำเนินการกระทำเท่านั้น
ตกลง. เราเปิดไฟล์ที่มีข้อขัดแย้งในโปรแกรมแก้ไขข้อความและดู:
เพื่อทำความเข้าใจว่า Git ทำอะไรที่นี่ เราต้องจำการเปลี่ยนแปลงที่เราทำและที่ แล้วเปรียบเทียบ:
- การเปลี่ยนแปลงที่อยู่ในบรรทัดนี้ในสาขาหลักจะอยู่ระหว่าง "<<<<<<< HEAD" และ "======="
- การเปลี่ยนแปลงที่อยู่ในสาขาคุณลักษณะ/ส่วนเพิ่มส่วนหัวอยู่ระหว่าง "=======" และ ">>>>>>> คุณลักษณะ/ส่วนเพิ่มส่วนหัว"
นี่คือวิธีที่ Git บอกเราว่าไม่สามารถหาวิธีผสานที่ตำแหน่งนี้ในไฟล์ได้ แบ่งส่วนนี้ออกเป็นสองส่วนจากสาขาต่างๆ และเชื้อเชิญให้เราแก้ไขข้อขัดแย้งในการผสานด้วยตนเอง
ยุติธรรมเพียงพอ ฉันตัดสินใจลบทุกอย่างอย่างกล้าหาญเหลือเพียงคำว่า "ส่วนหัว":
มาดูสถานะของการเปลี่ยนแปลงกัน คำอธิบายจะแตกต่างกันเล็กน้อย แทนที่จะเป็นสถานะ "แก้ไข" เรามี "ยกเลิกการรวม" เราจะพูดถึงสถานะที่ห้าได้ไหม? ฉันไม่คิดว่านี่เป็นสิ่งจำเป็น มาดูกัน:
เราสามารถโน้มน้าวตนเองได้ว่านี่เป็นกรณีพิเศษและไม่ธรรมดา ดำเนินการต่อ:
คุณอาจสังเกตเห็นว่าคำอธิบายแนะนำให้เขียนเฉพาะ "git commit" มาลองเขียนว่า:
และเช่นเดียวกับที่เราทำได้ เราแก้ไขข้อขัดแย้งในคอนโซล
แน่นอนว่าสิ่งนี้สามารถทำได้ง่ายขึ้นเล็กน้อยในสภาพแวดล้อมการพัฒนาแบบบูรณาการ ตัวอย่างเช่น ใน IntelliJ IDEA ทุกอย่างได้รับการตั้งค่าอย่างดีเพื่อให้คุณสามารถดำเนินการที่จำเป็นทั้งหมดได้ภายในนั้น แต่ IDE ทำสิ่งต่างๆ มากมาย "ภายใต้ประทุน" และเรามักไม่เข้าใจว่าเกิดอะไรขึ้นที่นั่น และเมื่อขาดความเข้าใจก็จะเกิดปัญหาขึ้นได้
การทำงานกับที่เก็บข้อมูลระยะไกล
ขั้นตอนสุดท้ายคือการหาคำสั่งเพิ่มเติมที่จำเป็นสำหรับการทำงานกับที่เก็บระยะไกล
ดังที่ฉันได้กล่าวไปแล้ว พื้นที่เก็บข้อมูลระยะไกลเป็นสถานที่ที่จัดเก็บพื้นที่เก็บข้อมูลและคุณสามารถโคลนได้
มีที่เก็บข้อมูลระยะไกลประเภทใดบ้าง ตัวอย่าง:
- GitHub เป็นแพลตฟอร์มการจัดเก็บข้อมูลที่ใหญ่ที่สุดสำหรับพื้นที่เก็บข้อมูลและการพัฒนาร่วมกัน
- GitLab เป็นเครื่องมือบนเว็บสำหรับวงจรชีวิตของ DevOps ด้วยโอเพ่นซอร์ส เป็นระบบที่ใช้ Git สำหรับจัดการที่เก็บโค้ดด้วย wiki, ระบบติดตามบั๊ก, ไปป์ไลน์ CI/CD และฟังก์ชันอื่นๆ
- BitBucket เป็นบริการเว็บสำหรับการโฮสต์โครงการและการพัฒนาร่วมกันโดยใช้ระบบควบคุมเวอร์ชันของ Mercurial และ Git ครั้งหนึ่งมันมีข้อได้เปรียบเหนือ GitHub ตรงที่ให้พื้นที่เก็บข้อมูลส่วนตัวฟรี ปีที่แล้ว GitHub ยังแนะนำความสามารถนี้ให้กับทุกคนฟรี
- และอื่น ๆ ...
เมื่อทำงานกับที่เก็บระยะไกล สิ่งแรกที่ต้องทำคือโคลนโครงการไปยังที่เก็บในเครื่องของคุณ
สำหรับสิ่งนี้ เราได้ส่งออกโครงการที่เราสร้างขึ้นในเครื่อง ตอนนี้ทุกคนสามารถโคลนมันด้วยตัวเองโดยเขียน:
ขณะนี้มีสำเนาที่สมบูรณ์ของโครงการในเครื่องแล้ว เพื่อให้แน่ใจว่าสำเนาของโปรเจ็กต์ในเครื่องเป็นเวอร์ชันล่าสุด คุณต้องดึงโปรเจ็กต์โดยเขียน:
ในกรณีของเรา ไม่มีอะไรเปลี่ยนแปลงในรีโมต repository ในปัจจุบัน ดังนั้นคำตอบคือ: อัปเดตแล้ว
แต่ถ้าเราทำการเปลี่ยนแปลงใด ๆ กับรีโมต repository รีโมต repository นั้นจะถูกอัพเดตหลังจากที่เราดึงมา
และสุดท้าย คำสั่งสุดท้ายคือการพุชข้อมูลไปยังที่เก็บระยะไกล เมื่อเราทำบางอย่างในเครื่องแล้วและต้องการส่งไปยังที่เก็บระยะไกล เราต้องสร้างคอมมิชชันใหม่ภายในเครื่องก่อน เพื่อแสดงสิ่งนี้ ลองเพิ่มสิ่งอื่นในไฟล์ข้อความของเรา:
ตอนนี้ค่อนข้างเป็นเรื่องธรรมดาสำหรับเรา - เราสร้างความมุ่งมั่นสำหรับงานนี้:
คำสั่งเพื่อส่งสิ่งนี้ไปยังที่เก็บระยะไกลคือ:
แค่นี้ก่อน!
ลิงค์ที่มีประโยชน์ |
---|
|
2. วิธีการทำงานกับ Git ใน IntelliJ IDEA
ในส่วนนี้ คุณจะได้เรียนรู้วิธีการทำงานกับ Git ใน IntelliJ IDEA
อินพุตที่จำเป็น:
- อ่าน ทำตาม และทำความเข้าใจในส่วนที่แล้ว สิ่งนี้จะช่วยให้แน่ใจว่าทุกอย่างถูกตั้งค่าและพร้อมใช้งาน
- ติดตั้ง IntelliJ IDEA ทุกอย่างควรจะเป็นระเบียบที่นี่ :)
- จัดสรรเวลาหนึ่งชั่วโมงเพื่อให้ได้ความเชี่ยวชาญที่สมบูรณ์
มาทำงานกับโครงการสาธิตที่ฉันใช้สำหรับบทความเกี่ยวกับ Git
โคลนโครงการในเครื่อง
มีสองตัวเลือกที่นี่:
- หากคุณมีบัญชี GitHub อยู่แล้วและต้องการผลักดันบางอย่างในภายหลัง จะเป็นการดีกว่าที่จะแยกโครงการและคัดลอกสำเนาของคุณเอง คุณสามารถอ่านเกี่ยวกับวิธีสร้างส้อมได้ในบทความอื่นภายใต้หัวข้อตัวอย่างของเวิร์กโฟลว์การฟอร์ก
- โคลนพื้นที่เก็บข้อมูลและทำทุกอย่างในเครื่องโดยไม่ต้องพุชสิ่งทั้งหมดไปยังเซิร์ฟเวอร์
ในการโคลนโครงการจาก GitHub คุณต้องคัดลอกลิงก์โครงการและส่งต่อไปยัง IntelliJ IDEA:
-
คัดลอกที่อยู่โครงการ:
-
เปิด IntelliJ IDEA แล้วเลือก "รับจากการควบคุมเวอร์ชัน":
-
คัดลอกและวางที่อยู่โครงการ:
-
คุณจะได้รับแจ้งให้สร้างโครงการ IntelliJ IDEA ยอมรับข้อเสนอ:
-
เนื่องจากไม่มีระบบการสร้าง เราจึงเลือก "สร้างโครงการจากแหล่งที่มาที่มีอยู่":
-
ถัดไปคุณจะเห็นหน้าจอที่สวยงามนี้:
ตอนนี้เราทราบเรื่องการโคลนนิ่งแล้ว คุณสามารถดูรอบๆ ได้
ดูครั้งแรกที่ IntelliJ IDEA ในฐานะ Git UI
ลองดูโปรเจ็กต์โคลนให้ละเอียดยิ่งขึ้น: คุณสามารถรับข้อมูลมากมายเกี่ยวกับระบบควบคุมเวอร์ชันได้แล้ว
ขั้นแรก เรามีบานหน้าต่างการควบคุมเวอร์ชันที่มุมล่างซ้าย ที่นี่คุณสามารถค้นหาการเปลี่ยนแปลงในเครื่องทั้งหมดและรับรายการคอมมิชชัน (คล้ายกับ "git log")
ไปที่การสนทนาของ Log กันเถอะ มีการสร้างภาพข้อมูลบางอย่างที่ช่วยให้เราเข้าใจว่าการพัฒนาดำเนินไปอย่างไร ตัวอย่างเช่น คุณจะเห็นว่ามีการสร้างสาขาใหม่โดยเพิ่มส่วนหัวลงใน txt commit ซึ่งต่อมาจะรวมเข้ากับสาขาหลัก หากคุณคลิกที่คอมมิต คุณจะเห็นข้อมูลทั้งหมดเกี่ยวกับการคอมมิตที่มุมขวา: การเปลี่ยนแปลงและข้อมูลเมตาทั้งหมด
นอกจากนี้ยังสามารถเห็นการเปลี่ยนแปลงที่เกิดขึ้นจริง เรายังเห็นว่าความขัดแย้งได้รับการแก้ไขที่นั่น IDEA ก็นำเสนอเรื่องนี้ได้เป็นอย่างดี
หากคุณดับเบิลคลิกที่ไฟล์ที่มีการเปลี่ยนแปลงระหว่างการคอมมิตนี้ เราจะดูว่าข้อขัดแย้งได้รับการแก้ไขอย่างไร:
เราทราบว่าทางด้านซ้ายและด้านขวาเรามีไฟล์เดียวกันสองเวอร์ชันซึ่งจำเป็นต้องรวมเป็นไฟล์เดียว และตรงกลาง เราได้ผลการรวมสุดท้าย
เมื่อโครงการมีสาขา คอมมิชชัน และผู้ใช้จำนวนมาก คุณต้องค้นหาแยกกันตามสาขา ผู้ใช้ และวันที่:
ก่อนเริ่มต้นควรอธิบายวิธีทำความเข้าใจว่าเราอยู่ในสาขาใด
ที่มุมขวาล่าง มีปุ่ม "Git: master" สิ่งที่ตามมา "Git:" คือสาขาปัจจุบัน หากคุณคลิกปุ่ม คุณจะสามารถทำสิ่งที่มีประโยชน์ได้มากมาย: เปลี่ยนไปใช้สาขาอื่น สร้างสาขาใหม่ เปลี่ยนชื่อสาขาที่มีอยู่ และอื่นๆ
การทำงานกับที่เก็บข้อมูล
ปุ่มลัดที่มีประโยชน์
สำหรับงานในอนาคต คุณต้องจำปุ่มลัดที่มีประโยชน์มากสองสามตัว:
- CTRL+T — รับการเปลี่ยนแปลงล่าสุดจากที่เก็บระยะไกล (git pull)
- CTRL+K — สร้างคอมมิชชัน / ดูการเปลี่ยนแปลงปัจจุบันทั้งหมด ซึ่งรวมถึงไฟล์ที่ไม่ได้ติดตามและแก้ไข (คอมไพล์คอมไพล์)
- CTRL+SHIFT+K — นี่คือคำสั่งสำหรับการพุชการเปลี่ยนแปลงไปยังที่เก็บระยะไกล คอมมิชชันทั้งหมดที่สร้างขึ้นในเครื่องและยังไม่ได้อยู่ในที่เก็บระยะไกลจะถูกพุช (git push)
- ALT+CTRL+Z — ย้อนกลับการเปลี่ยนแปลงในไฟล์ที่ระบุเป็นสถานะของการกระทำล่าสุดที่สร้างขึ้นในพื้นที่เก็บข้อมูลในเครื่อง หากคุณเลือกทั้งโครงการที่มุมซ้ายบน คุณสามารถย้อนกลับการเปลี่ยนแปลงในไฟล์ทั้งหมดได้
เราต้องการอะไร
เพื่อให้งานสำเร็จ เราจำเป็นต้องเชี่ยวชาญสถานการณ์พื้นฐานที่ใช้ทุกที่
วัตถุประสงค์คือเพื่อใช้งานฟังก์ชันใหม่ในสาขาที่แยกจากกัน จากนั้นพุชไปยังที่เก็บระยะไกล (จากนั้นคุณต้องสร้างคำขอดึงไปยังสาขาหลักด้วย แต่นั่นอยู่นอกเหนือขอบเขตของบทเรียนนี้)
สิ่งที่จำเป็นในการทำเช่นนี้?
-
รับการเปลี่ยนแปลงปัจจุบันทั้งหมดในสาขาหลัก (เช่น "ต้นแบบ")
-
จากสาขาหลักนี้ ให้สร้างสาขาแยกต่างหากสำหรับงานของคุณ
-
ใช้ฟังก์ชันใหม่
-
ไปที่สาขาหลักและตรวจสอบว่ามีการเปลี่ยนแปลงใหม่ในขณะที่เรากำลังดำเนินการอยู่หรือไม่ ถ้าไม่เช่นนั้นทุกอย่างก็เรียบร้อยดี แต่ถ้ามีการเปลี่ยนแปลงเราจะทำสิ่งต่อไปนี้: ไปที่สาขาที่ทำงานและรีบูตการเปลี่ยนแปลงจากสาขาหลักเป็นของเรา ถ้าทุกอย่างเป็นไปด้วยดีก็ดี แต่เป็นไปได้ทั้งหมดที่จะมีความขัดแย้ง เมื่อมันเกิดขึ้น พวกเขาสามารถแก้ไขได้ล่วงหน้า โดยไม่ต้องเสียเวลาในที่เก็บระยะไกล
คุณสงสัยหรือไม่ว่าทำไมคุณต้องทำสิ่งนี้? เป็นมารยาทที่ดีและป้องกันไม่ให้ความขัดแย้งเกิดขึ้นหลังจากส่งสาขาของคุณไปยังที่เก็บในเครื่อง (แน่นอนว่ามีความเป็นไปได้ที่ความขัดแย้งจะยังคงเกิดขึ้น แต่มันจะเล็กลงมาก )
-
พุชการเปลี่ยนแปลงของคุณไปยังที่เก็บระยะไกล
จะรับการเปลี่ยนแปลงจากเซิร์ฟเวอร์ระยะไกลได้อย่างไร
เราได้เพิ่มคำอธิบายใน README ด้วยคอมมิตใหม่และต้องการรับการเปลี่ยนแปลงเหล่านี้ หากมีการเปลี่ยนแปลงทั้งในที่เก็บข้อมูลในเครื่องและในรีโมต เราได้รับเชิญให้เลือกระหว่างการรวมและการรีเบส เราเลือกที่จะผสาน
ป้อน CTRL+T :
ตอนนี้คุณสามารถดูได้ว่า README มีการเปลี่ยนแปลงอย่างไร กล่าวคือ การเปลี่ยนแปลงจากที่เก็บระยะไกลถูกดึงเข้ามา และที่มุมล่างขวา คุณสามารถดูรายละเอียดทั้งหมดของการเปลี่ยนแปลงที่มาจากเซิร์ฟเวอร์
สร้างสาขาใหม่ตามต้นแบบ
ทุกอย่างเรียบง่ายที่นี่
ไปที่มุมล่างขวาแล้วคลิกGit: master เลือก+ สาขาใหม่
ปล่อยให้ ช่องทำเครื่องหมาย Checkout สาขาที่เลือกไว้และป้อนชื่อสาขาใหม่ ในกรณีของเรา: สิ่งนี้จะเป็นreadme- improverGit: masterจะเปลี่ยนเป็น Git : readme-improver
มาจำลองการทำงานแบบคู่ขนานกัน
เพื่อให้ความขัดแย้งปรากฏขึ้น ต้องมีคนสร้างมันขึ้นมา
เราจะแก้ไข README ด้วยการคอมมิทใหม่ผ่านเบราว์เซอร์ ซึ่งจะเป็นการจำลองการทำงานแบบคู่ขนาน ราวกับว่ามีคนทำการเปลี่ยนแปลงในไฟล์เดียวกันในขณะที่เรากำลังแก้ไขอยู่ ผลที่ตามมาคือความขัดแย้ง เราจะลบคำว่า "fully" ออกจากบรรทัดที่ 10
ใช้ฟังก์ชันของเรา
งานของเราคือเปลี่ยน README และเพิ่มคำอธิบายให้กับบทความใหม่ นั่นคืองานใน Git ต้องผ่าน IntelliJ IDEA เพิ่มสิ่งนี้:
การเปลี่ยนแปลงเสร็จสิ้น ตอนนี้เราสามารถสร้างคอมมิชชันได้แล้ว กดCTRL+Kซึ่งจะให้เรา:
ก่อนสร้างคอมมิท เราจำเป็นต้องพิจารณาอย่างใกล้ชิดว่าหน้าต่างนี้นำเสนออะไร
ใน ส่วน Commit Messageเราเขียนข้อความที่เกี่ยวข้องกับ Commit จากนั้นในการสร้าง เราต้องคลิกยอมรับ .
เราเขียนว่า README มีการเปลี่ยนแปลงและสร้างการคอมมิต การแจ้งเตือนปรากฏขึ้นที่มุมซ้ายล่างพร้อมชื่อของการคอมมิต:
ตรวจสอบว่าสาขาหลักมีการเปลี่ยนแปลงหรือไม่
เราเสร็จสิ้นภารกิจของเรา มันได้ผล. เราเขียนการทดสอบ ทุกอย่างปกติดี. แต่ก่อนที่จะส่งไปยังเซิร์ฟเวอร์ เรายังคงต้องตรวจสอบว่ามีการเปลี่ยนแปลงใด ๆ ในสาขาหลักในระหว่างนี้หรือไม่ มันเกิดขึ้นได้อย่างไร? ค่อนข้างง่าย: มีคนรับงานต่อจากคุณ และมีคนทำงานนั้นเสร็จเร็วกว่าคุณทำงานให้เสร็จ
ดังนั้นเราต้องไปที่สาขาหลัก ในการทำเช่นนี้ เราต้องทำตามที่แสดงในมุมล่างขวาของภาพด้านล่าง:
ในสาขาหลัก ให้กดCTRL+Tเพื่อรับการเปลี่ยนแปลงล่าสุดจากเซิร์ฟเวอร์ระยะไกล เมื่อพิจารณาถึงการเปลี่ยนแปลง คุณจะเห็นสิ่งที่เกิดขึ้นได้อย่างง่ายดาย:
คำว่า "fully" ถูกลบออก อาจมีบางคนจากฝ่ายการตลาดตัดสินใจว่าไม่ควรเขียนแบบนั้นและให้งานแก่นักพัฒนาในการอัปเดต
ตอนนี้เรามีสำเนาของมาสเตอร์แบรนช์เวอร์ชันล่าสุดในเครื่องแล้ว กลับไปreadme-ปรับปรุง
ตอนนี้เราจำเป็นต้องรีบูตการเปลี่ยนแปลงจากสาขาหลักเป็นของเรา เราทำสิ่งนี้:
หากคุณทำทุกอย่างถูกต้องและทำตามกับฉัน ผลลัพธ์ควรแสดงความขัดแย้งในไฟล์ README:
ที่นี่เรายังมีข้อมูลมากมายให้ทำความเข้าใจและดื่มด่ำ นี่คือรายการของไฟล์ (ในกรณีของเราคือหนึ่งไฟล์) ที่มีข้อขัดแย้ง เราสามารถเลือกได้สามตัวเลือกคือ
- ยอมรับของคุณ — ยอมรับเฉพาะการเปลี่ยนแปลงจาก readme-improver
- ยอมรับของพวกเขา — ยอมรับการเปลี่ยนแปลงจากเจ้านายเท่านั้น
- รวม — เลือกด้วยตัวคุณเองว่าคุณต้องการเก็บอะไรและทิ้งอะไร
ยังไม่ชัดเจนว่ามีการเปลี่ยนแปลงอะไร หากมีการเปลี่ยนแปลงเป็นสาขาหลัก จำเป็นต้องมีการเปลี่ยนแปลงที่นั่น ดังนั้นเราจึงไม่สามารถยอมรับการเปลี่ยนแปลงของเราได้ ดังนั้น เราเลือกผสาน :
เราจะเห็นว่ามีสามส่วน:
- นี่คือการเปลี่ยนแปลงจากโปรแกรมปรับปรุง readme
- ผลลัพธ์ที่ผสาน สำหรับตอนนี้ สิ่งที่มีอยู่ก่อนการเปลี่ยนแปลง
- การเปลี่ยนแปลงจากสาขาหลัก
เราจำเป็นต้องสร้างผลลัพธ์ที่ผสานกันซึ่งจะทำให้ทุกคนพึงพอใจ เมื่อทบทวนสิ่งที่เปลี่ยนแปลงก่อนการเปลี่ยนแปลงของเรา เราพบว่าพวกเขาเพียงแค่ลบคำว่า "fully" ได้ไม่มีปัญหา! นั่นหมายความว่าเราจะลบออกในผลลัพธ์ที่ผสานแล้วเพิ่มการเปลี่ยนแปลงของเรา เมื่อเราแก้ไขผลลัพธ์ที่ผสานแล้ว เราสามารถคลิกใช้
จากนั้นการแจ้งเตือนจะปรากฏขึ้นเพื่อบอกเราว่าการรีเบสสำเร็จแล้ว:
ที่นั่น! เราแก้ไขข้อขัดแย้งแรกของเราผ่าน IntelliJ IDEA
ผลักดันการเปลี่ยนแปลงไปยังเซิร์ฟเวอร์ระยะไกล
ขั้นตอนต่อไปคือการผลักดันการเปลี่ยนแปลงไปยังเซิร์ฟเวอร์ระยะไกลและสร้างคำขอดึง ในการทำเช่นนี้ เพียงกดCTRL+SHIFT+ K จากนั้นเราจะได้รับ:
ทางด้านซ้ายจะมีรายการคอมมิชชันที่ยังไม่ได้ส่งไปยังที่เก็บระยะไกล ทางด้านขวาจะเป็นไฟล์ทั้งหมดที่มีการเปลี่ยนแปลง และนั่นแหล่ะ! กดPushแล้วคุณจะพบความสุข :)
หากพุชสำเร็จ คุณจะเห็นการแจ้งเตือนแบบนี้ที่มุมล่างขวา:
โบนัส: สร้างคำขอดึง
ไปที่ที่เก็บ GitHub แล้วเราจะเห็นว่า GitHub รู้แล้วว่าเราต้องการอะไร:
คลิกเปรียบเทียบ & ดึงคำขอ จากนั้นคลิกสร้างคำขอดึงข้อมูล เนื่องจากเราแก้ไขข้อขัดแย้งล่วงหน้า ตอนนี้เมื่อสร้างคำขอดึง เราสามารถผสานได้ทันที:
แค่นี้ก่อน!
GO TO FULL VERSION