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

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

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

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

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

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

เมื่อคุณดึงโค้ดจากที่เก็บระยะไกล Git จะดึงเนื้อหาของที่เก็บนั้นและบันทึกลงในเครื่องท้องถิ่นของคุณ สิ่งนี้สามารถเกิดขึ้นได้ก็ต่อเมื่อคุณคอมมิตการเปลี่ยนแปลงทั้งหมดกับไฟล์ที่คุณต้องการบันทึก

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

ตัวอย่างสถานการณ์

มาแก้ไขที่เก็บ Git ที่เรียกว่า ck-git กัน ขั้นแรก ให้โคลนสำเนาของที่เก็บนี้:

git clone https://github.com/career-karma-tutorials/ck-git

ตอนนี้เรามีสำเนาของที่เก็บในเครื่องของเราแล้ว ที่เก็บนี้มีไฟล์เดียว:README.md เนื้อหาคือ:

# ck-git

เราจะไปที่ GitHub และแก้ไขไฟล์นี้บนเซิร์ฟเวอร์ ไฟล์ของเราตอนนี้มีเนื้อหา:

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

# Career Karma Git

ที่เก็บเวอร์ชันภายในเครื่องของเราตอนนี้แตกต่างจากสาขาหลักต้นทางบนเวอร์ชันระยะไกลของที่เก็บ

เวอร์ชันของเรามีโค้ดที่อยู่ในที่เก็บระยะไกลเมื่อเราดึงโค้ด ที่เก็บระยะไกลมีการเปลี่ยนแปลงที่เราได้ทำกับ README.md

ตอนนี้ สมมติว่าเราเปลี่ยน README.md บนเครื่องของเรา:

# CK Git

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

git pull

คำสั่งนี้ส่งคืนข้อผิดพลาด:

...
Updating a30b784..ec281fc
error: Your local changes to the following files would be overwritten by merge:
    README.md
Please commit your changes or stash them before you merge.
Aborting

เราได้ย่อการตอบสนองของคำสั่งนี้ให้สั้นลง ข้อความที่เราควรเน้นคือ “การเปลี่ยนแปลงในเครื่องของคุณกับไฟล์ต่อไปนี้จะถูกเขียนทับโดยการผสาน”

การแก้ปัญหา

ขณะนี้มีไฟล์ของเราสองชุด:ชุดหนึ่งอยู่ในเครื่องของเรา และอีกชุดหนึ่งอยู่ในที่เก็บระยะไกลของเรา เมื่อเราดึงโค้ดจากที่เก็บระยะไกล Git ไม่แน่ใจว่าไฟล์เวอร์ชันใดควรเหลืออยู่

เพื่อแก้ไขข้อผิดพลาดนี้ เราสามารถซ่อนโค้ดของเราหรือคอมมิตโค้ดของเราก็ได้

ในการคอมมิตโค้ดของเรา เราสามารถเพิ่มไฟล์ README.md ในการคอมมิต และสร้างคอมมิตที่มีไฟล์นั้นได้:

git add README.md
git commit -m "docs: Update README.md"

สิ่งนี้จะเพิ่มการเปลี่ยนแปลงที่เราทำกับ README.md บนเครื่องท้องถิ่นของเราไปยังประวัติการคอมมิตของโปรเจ็กต์ของเรา Git จะได้รู้ว่าเราต้องการเก็บการเปลี่ยนแปลงเหล่านี้ไว้

วิธีที่สองคือการซ่อนการเปลี่ยนแปลงของเรา ซึ่งช่วยให้เราบันทึกการเปลี่ยนแปลงไว้ดูภายหลังได้ เราสามารถซ่อนรหัสของเราโดยใช้คำสั่ง git stash:

git stash

คำสั่งนี้จะบันทึกการเปลี่ยนแปลงของเราไว้ในที่ซ่อน (รหัสของเรา "ซ่อนไว้" ไว้ใช้ภายหลัง) ตอนนี้เราได้ซ่อนโค้ดของเราแล้ว เราสามารถดึงโค้ดจากที่เก็บระยะไกลได้อย่างปลอดภัย:

git stash pop

สามารถดูโค้ดใน Git stash ได้ด้วยการรันคำสั่ง git stash pop ซึ่งจะทำให้เราเห็นการเปลี่ยนแปลงที่เราได้ทำกับไฟล์ซึ่งเราไม่ได้กระทำกับที่เก็บของเรา ซึ่งหมายความว่าหากเราตัดสินใจว่าต้องการคอมมิตการเปลี่ยนแปลงกับไฟล์ในภายหลัง เราก็สามารถทำได้

บทสรุป

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

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