Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

Git การเปลี่ยนแปลงในเครื่องของคุณกับไฟล์ต่อไปนี้จะถูกเขียนทับโดย checkout Solution

คุณไม่สามารถแก้ไขไฟล์บนสองสาขาและสลับระหว่างสาขาเหล่านั้นโดยไม่ต้องคอมมิตหรือซ่อนไฟล์ เนื่องจาก 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 "การเปลี่ยนแปลงในเครื่องของคุณกับไฟล์ต่อไปนี้จะถูกเขียนทับโดยการชำระเงิน" เกิดขึ้นเมื่อคุณทำการเปลี่ยนแปลงในสองสาขาโดยไม่ต้องยอมรับหรือซ่อนการเปลี่ยนแปลงเหล่านั้นและพยายามนำทางระหว่างสาขาต่างๆ

คุณสามารถแก้ไขปัญหานี้โดยเก็บการเปลี่ยนแปลงของคุณไว้ในภายหลังหรือเพิ่มไปยังการคอมมิต

ตอนนี้คุณมีความรู้ที่จำเป็นในการแก้ไขข้อผิดพลาดนี้อย่างมืออาชีพแล้ว!