Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การแก้ไขปัญหา >> ข้อผิดพลาด Windows

วิธีแก้ไข Git Error: "You need to resolve your current index first"

ข้อผิดพลาด "You need to resolve your current index first" เกิดขึ้นใน Git และหมายความว่ามี Merge Conflict และเว้นแต่คุณจะแก้ไข Conflict นั้น คุณจะไม่ได้รับอนุญาตให้ Checkout ไปยัง Branch อื่น ข้อความข้อผิดพลาดนี้ยังบ่งชี้ว่า Merge ล้มเหลว หรือมี Conflict กับไฟล์

ไฟล์เหล่านี้ Merge และ Conflict คืออะไร? คำศัพท์เหล่านี้จะไม่รู้จักหากคุณเป็นมือใหม่ในการใช้ Git Git เป็น Version Control Platform ที่อนุญาตให้หลายคนทำงานบนไฟล์พร้อมกัน และ Push Local Copy ของโค้ดไปยังที่จัดเก็บใน Cloud วิธีนี้ หากคุณเปลี่ยนโค้ดที่ดาวน์โหลดมา (หรือ Push ไปแล้ว) และ Push อีกครั้งไปยัง Cloud การเปลี่ยนแปลงจะถูก Overwrite ใน Cloud โดย Local Copy ของคุณ

Git มี Concept ของ Branches มี Master Branch และ Branches อื่นๆ แยกออกจากมัน ข้อผิดพลาดนี้เกิดขึ้นโดยเฉพาะหากคุณกำลัง Switch จาก Branch หนึ่งไปอีก Branch (ใช้ Checkout) และมี Conflict ในไฟล์ของ Branch ปัจจุบัน หากไม่แก้ไข จะไม่สามารถ Checkout ออกจาก Branch ได้

สาเหตุของ Git Error: You need to resolve your current index first

เช่นที่กล่าวมา สาเหตุของข้อผิดพลาดนี้ค่อนข้างจำกัด คุณจะเจอข้อผิดพลาดนี้เพราะ:

  • Merge ล้มเหลว (Merge Failed) และคุณต้องแก้ไข Merge Conflict ก่อนจะดำเนินการอื่นต่อ
  • มี Conflicts ในไฟล์ที่ Branch ปัจจุบัน (หรือ Branch เป้าหมาย) และเนื่องจาก Conflict เหล่านี้ คุณจะไม่สามารถ Check Out ของ Branch หรือ Push Code ได้

ก่อนดำเนินการแก้ไข โปรดตรวจสอบว่ามี Version Control ที่เหมาะสม และเป็นความฉลาดที่จะหยุดสมาชิกทีมคนอื่นไม่ให้เปลี่ยนโค้ด ก่อนที่คุณจะแก้ไข Conflict

วิธีแก้ที่ 1: แก้ไข Merge Conflict

หาก Merge ของคุณไม่ได้รับการแก้ไขโดย Git อัตโนมัติ มันจะทิ้ง Index และ Working Tree ไว้ในสถานะพิเศษ ซึ่งช่วยให้คุณได้ข้อมูลทั้งหมดที่ต้องการเพื่อแก้ไข Merge ไฟล์ที่มี Conflict จะถูก Mark อย่างพิเศษใน Index และจนกว่าคุณจะแก้ไขปัญหาและ Update Index คุณจะยังคงได้รับข้อความข้อผิดพลาดนี้

  1. แก้ไข Conflict ทั้งหมด ตรวจสอบไฟล์ที่มี Conflict เพราะจะถูก Mark โดย Index และทำการเปลี่ยนแปลงในไฟล์เหล่านั้นตามที่เหมาะสม
  2. หลังจากที่คุณแก้ไข Conflict ทั้งหมดแล้ว Add ไฟล์ และจากนั้น Commit

ตัวอย่าง:

$ git add file.txt
$ git commit

คุณสามารถเพิ่ม Comment ส่วนตัวขณะ Commit ได้ ตัวอย่าง:

$ git commit -m "This is Appuals Git repository"
  1. หลังจากที่คุณแก้ไข Conflict แล้ว ลอง Checkout ออกจาก Branch ปัจจุบัน ดูว่าปัญหาแก้ไขแล้วหรือไม่

วิธีแก้ที่ 2: ย้อนกลับ Merge (Revert Merge)

มีกรณีจำนวนมากที่คุณ Merge Branches และทำให้สับสน เพราะ Conflict และความสับสนทั้งหมด โปรเจกต์ตอนนี้เป็นระบะ และสมาชิกทีมโทษคุณ ในกรณีนี้ คุณต้อง Revert Previous Commit (Merge Commit) นี่จะ Undo Merge ทั้งหมด และนำโปรเจกต์ทั้งหมดกลับสู่สถานะที่คุณยังไม่ได้ทำ Merge ใดๆ นี่อาจเป็นชีวิต第二次หากคุณทำให้สับสนเกินกว่าจะซ่อมแซมได้

เพื่อ Revert Merge ให้พิมพ์คำสั่งต่อไปนี้:

$ git reset --merge

คำสั่งข้างต้นจะ Reset Index และ Update ไฟล์ใน Working Tree ที่แตกต่างระหว่าง 'Commit' และ 'Head' อย่างไรก็ตาม มันจะเก็บไฟล์ที่แตกต่างระหว่าง Index และ Working Tree ไว้

คุณยังสามารถลอง Revert HEAD ด้วยคำสั่งต่อไปนี้:

$ git revert HEAD

หากคุณต้องการระบุ Merge Commit ที่แน่นอนที่ต้องการ Revert คุณสามารถใช้คำสั่ง Revert เดียวกันแต่ระบุพารามิเตอร์เพิ่มเติม SHA1 Hash ของ Merge Commit จะถูกใช้ -m ตามด้วย 1 บ่งชี้ว่าเราต้องการเก็บ Parent Side ของ Merge (Branch ที่เรา Merge เข้าไป) ผลลัพธ์ของ Revert นี้คือ Git จะสร้าง Commit ใหม่ที่ Roll Back การเปลี่ยนแปลงจาก Merge

$ git revert -m 1 dd8d6f587fa24327d5f5afd6fa8c3e604189c8d4