คุณไม่สามารถแก้ไขไฟล์บนสองสาขาและสลับระหว่างสาขาเหล่านั้นโดยไม่ต้องคอมมิตหรือซ่อนไฟล์ เนื่องจาก Git ไม่แน่ใจว่าควรบันทึกการเปลี่ยนแปลงใดและควรเขียนทับการเปลี่ยนแปลงใด
คู่มือนี้อธิบายข้อผิดพลาด "การเปลี่ยนแปลงในเครื่องของคุณในไฟล์ต่อไปนี้จะถูกเขียนทับโดยการชำระเงิน" และความหมาย เราจะอธิบายตัวอย่างเพื่อให้คุณทราบวิธีแก้ไขข้อผิดพลาดนี้
การเปลี่ยนแปลงในเครื่องของคุณกับไฟล์ต่อไปนี้จะถูกเขียนทับโดยการชำระเงิน
การควบคุมเวอร์ชัน Git ช่วยให้คุณรักษาสายการพัฒนาแยกกัน ซึ่งเรียกว่าสาขา การเปลี่ยนแปลงในสาขาหนึ่งจะไม่มีผลกับอีกสาขาหนึ่ง เว้นแต่คุณจะรวมสองสาขาเข้าด้วยกัน
เมื่อคุณนำทางไปยังสาขา คุณสามารถดูที่เก็บในช่วงเวลาหนึ่งๆ ในประวัติของสาขา และทำการเปลี่ยนแปลงที่คุณต้องการ คุณควรยอมรับการเปลี่ยนแปลงที่ทำขึ้นเมื่อคุณพร้อม เพื่อให้ Git ติดตามวิวัฒนาการของโครงการของคุณ
คุณไม่สามารถสลับระหว่างสองสาขาได้หากทั้งสองสาขามีการเปลี่ยนแปลงไฟล์ที่ไม่มีข้อผูกมัด Git ต้องการทราบว่าไฟล์ควรถูกบันทึกหรือเป็นส่วนหนึ่งของการคอมมิต ซึ่งจะช่วยป้องกันคุณจากการเขียนทับโค้ดโดยไม่ได้ตั้งใจซึ่งคุณอาจต้องการอ้างอิงกลับไปในภายหลัง
ตัวอย่างสถานการณ์
เราจะทำการโคลนที่เก็บที่มีไฟล์ชื่อ README.md:
git clone https://github.com/career-karma-tutorials/ck-git
เนื้อหาของไฟล์ README.md มีดังนี้:
# ck-git
พื้นที่เก็บข้อมูลของเรามีสองสาขา:การพัฒนาและต้นแบบ ในไดเร็กทอรีการทำงานในพื้นที่ของเรา เราจะเปลี่ยนไฟล์ README.md ที่สาขาหลักต้นทาง:
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
# Career Karma Git
สาขาหลักของเราตอนนี้แตกต่างจากที่เก็บระยะไกลของเรา เราจะเปลี่ยนไปใช้สาขาการพัฒนาของเราและเปลี่ยนเนื้อหาของ README เป็นดังนี้:
# Career Karma [Development]
เราสามารถเปลี่ยนไฟล์นี้ในสาขาการพัฒนาได้โดยดำเนินการคำสั่งเหล่านี้:
git checkout development nano README.md
ถัดไป สลับกลับไปที่มาสเตอร์แบรนช์ คอมมิตการเปลี่ยนแปลงที่ทำกับแบรนช์ แล้วพุชไปยังที่เก็บระยะไกลของเรา:
git checkout master git add README.md git commit -m "docs: Update README" git push
คำสั่ง git checkout ช่วยให้เราสลับไปยังสาขาหลักได้ ในการตรวจสอบ พื้นที่เก็บข้อมูลระยะไกลของเราตอนนี้ประกอบด้วย:
- แก้ไข README.md ในสาขาการพัฒนา
- มาสเตอร์แบรนช์ที่อยู่ข้างหน้าหนึ่งคอมมิท
ตอนนี้ มาแก้ไข README.md ของเราอีกครั้งที่สาขาหลัก:
# Tutorials
ซึ่งหมายความว่าทั้งสองสาขามีความแตกต่างระหว่างสาขาหลักระยะไกล ลองเปลี่ยนไปใช้สาขาการพัฒนาของเราโดยมีการเปลี่ยนแปลงเหล่านี้:
git checkout development
คำสั่งนี้ส่งคืนข้อความแสดงข้อผิดพลาด:
error: Your local changes to the following files would be overwritten by checkout: README.md Please commit your changes or stash them before you switch branches. Aborting
การแก้ปัญหา
เนื่องจากสาขาการพัฒนาและมาสเตอร์ของเรามีการเปลี่ยนแปลงที่ไม่มีข้อผูกมัด Git จึงไม่สามารถดำเนินการชำระเงินได้ หาก Git ดำเนินการต่อ การเปลี่ยนแปลงที่เราทำกับ README.md บนมาสเตอร์แบรนช์จะไม่ถูกบันทึก
เราสามารถแก้ไขข้อผิดพลาดนี้ได้สองวิธี อันดับแรก เราสามารถยืนยันการเปลี่ยนแปลงของเราในมาสเตอร์แบรนช์:
git add README.md git commit -m "docs: Add tutorials message to README.md file" git push
ในคำสั่งเหล่านี้ เราเพิ่มไฟล์ README.md ลงในพื้นที่ staging เพิ่มไฟล์ทั้งหมดจากพื้นที่ staging ลงในคอมมิต และเราพุชการเปลี่ยนแปลงไปยังที่เก็บระยะไกล
ตอนนี้ Git มีบันทึกว่าไฟล์ README.md ของเราปรากฏอย่างไรพร้อมกับการเปลี่ยนแปลงที่เราทำ
อีกทางหนึ่ง เราอาจซ่อนการเปลี่ยนแปลงไว้ใช้ในภายหลัง นี่เป็นทางออกที่ดีหากคุณต้องการให้การเปลี่ยนแปลงของคุณสามารถเข้าถึงได้ในภายหลังเมื่อคุณยังไม่พร้อมที่จะเพิ่มการเปลี่ยนแปลงในการคอมมิต หากต้องการซ่อนการเปลี่ยนแปลง คุณสามารถเรียกใช้คำสั่ง git stash:
git stash save README.md
การดำเนินการนี้จะบันทึกไฟล์ README.md ของเราไว้ในที่ซ่อน เมื่อใดก็ตามที่เราพร้อมที่จะกลับมาดูไฟล์นี้อีกครั้ง เราสามารถเข้าถึง stash ได้โดยใช้คำสั่ง stash pop:
git stash pop
คำสั่งนี้จะกู้คืนไฟล์ README.md ในที่เก็บของเรา “การเก็บออม” เป็นอีกวิธีหนึ่งในการพูดว่า “เก็บเงินไว้ใช้ทีหลัง” Stashes ไม่ได้สร้างการคอมมิตของการเปลี่ยนแปลงของคุณ
หลังจากที่เรารันหนึ่งในโซลูชันข้างต้นแล้ว เราสามารถนำทางไปยังสาขาการพัฒนาได้สำเร็จ:
git checkout development
คำสั่งนี้เปลี่ยนสาขาของเราเป็น "การพัฒนา" และแจ้งให้เราทราบถึงการเปลี่ยนแปลงนี้ในเทอร์มินัลของเรา:
Switched to branch 'development'
เราได้แก้ไขปัญหานี้แล้ว
บทสรุป
ข้อผิดพลาด Git "การเปลี่ยนแปลงในเครื่องของคุณกับไฟล์ต่อไปนี้จะถูกเขียนทับโดยการชำระเงิน" เกิดขึ้นเมื่อคุณทำการเปลี่ยนแปลงในสองสาขาโดยไม่ต้องยอมรับหรือซ่อนการเปลี่ยนแปลงเหล่านั้นและพยายามนำทางระหว่างสาขาต่างๆ
คุณสามารถแก้ไขปัญหานี้โดยเก็บการเปลี่ยนแปลงของคุณไว้ในภายหลังหรือเพิ่มไปยังการคอมมิต
ตอนนี้คุณมีความรู้ที่จำเป็นในการแก้ไขข้อผิดพลาดนี้อย่างมืออาชีพแล้ว!