Git stash pop- ต้องผสานไม่สามารถรีเฟรชดัชนีได้


117

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

app.coffee: needs merge
unable to refresh index

ใครทราบวิธีแก้ปัญหานี้

แก้ไขแล้ว!

ปรากฎว่าปัญหาที่เกิดขึ้นจริงคือความขัดแย้งในการผสานที่ยังไม่ได้รับการแก้ไขจากการรวมไม่ใช่ว่าการซ่อนจะทำให้เกิดความขัดแย้งในการผสาน

การแก้ไข: ส่งไฟล์ที่ขัดแย้งกัน


6
เป็นเรื่องที่น่าสนใจที่คำตอบที่ยอมรับนั้นซับซ้อนในขณะที่วิธีแก้ปัญหาที่แท้จริงนั้นค่อนข้างง่าย: คุณไม่จำเป็นต้องส่งไฟล์ที่ขัดแย้ง แต่เพิ่มเข้าไป
Javi V

3
เพิ่มคำตอบของคุณเป็นคำตอบที่ไม่อยู่ในคำถาม
Black

คำตอบ:


68

git statusก่อนตรวจสอบ
ตามที่ OP กล่าวถึง

ปัญหาที่แท้จริงคือความขัดแย้งในการผสานที่ไม่ได้รับการแก้ไขจากการผสานไม่ใช่ว่าการเก็บรักษาจะทำให้เกิดความขัดแย้งในการผสาน

นั่นคือที่ที่git statusจะกล่าวถึงไฟล์นั้นว่าเป็น " both modified"

การแก้ไข: ส่งไฟล์ที่ขัดแย้งกัน


คุณสามารถพบสถานการณ์ที่คล้ายกันเมื่อ 4 วันก่อนในขณะที่เขียนคำตอบนี้ (13 มีนาคม 2555) พร้อมกับโพสต์นี้: "" ดึงไม่ได้เนื่องจากคุณมีไฟล์ที่ไม่ได้ผสาน "":

julita@yulys:~/GNOME/baobab/help/C$ git stash pop
help/C/scan-remote.page: needs merge
unable to refresh index

สิ่งที่คุณทำคือการแก้ไขข้อขัดแย้งในการผสาน (แก้ไขไฟล์ที่ถูกต้องและยืนยัน):
ดู " ฉันจะแก้ไขข้อขัดแย้งในการผสานใน Git ได้อย่างไร "

สิ่งที่ผู้เขียนโพสต์บล็อกทำคือ:

julita@yulys:~/GNOME/baobab/help/C$ git reset --hard origin/mallard-documentation
HEAD is now at ff2e1e2 Add more steps for optional information for scanning.

คือยกเลิกการผสานปัจจุบันอย่างสมบูรณ์โดยอนุญาตให้git stash popนำไปใช้
ดู "การยกเลิกการรวมใน Git "

นี่คือสองตัวเลือกของคุณ


1
บางครั้งมันก็เกิดขึ้นเราอยู่ในสาขาอื่น ตัวอย่างเช่นฉันมีสาขา A และทำการเปลี่ยนแปลงบางอย่างและเปลี่ยนเป็นสาขา B และทำการเปลี่ยนแปลงและยืนยัน ตอนนี้อยากไปสาขา A แต่ลืมเช็คเอาต์ที่ A และพยายามใช้ที่ซ่อน ในกรณีนี้ก็ให้ปัญหาเดียวกัน ฉันประสบปัญหานี้ในกรณีข้างต้น
Kapil Verma

ฉันยอมทำทุกอย่าง แต่ 'git bash pop' ทำให้ความขัดแย้งเหล่านั้นกลับคืนมา ฉันไม่เห็นว่าทำไมฉันควรจะต้องยอมรับต่อไปเมื่อฉันไม่ต้องการเปลี่ยนแปลง bach ปัจจุบัน ฉันแค่อยากจะกลับไปที่สาขาที่ถูกซ่อนไว้
Philip Rego

@PhilipRego git bash pop? หรือ git stash pop? ลองชำระเงินที่ซ่อนแทนการใช้ git stash: stackoverflow.com/a/16625128/6309
VonC

ขออภัยหมายถึง 'git stash pop' ฉันทิ้งที่ซ่อนไปแล้ว แต่ฉันจะลองครั้งต่อไปที่มีปัญหานี้ ขอบคุณ
Philip Rego

14

ฉันมีปัญหานี้จากนั้นแก้ไขความขัดแย้งและยอมรับและการทำgit stash popอีกครั้งคือการกู้คืนที่ซ่อนเดิมอีกครั้ง (ทำให้เกิดความขัดแย้งเดียวกัน :-()

สิ่งที่ฉันต้องทำ (คำเตือน: สำรองที่ซ่อนของคุณก่อน) คือgit stash dropกำจัดมัน


4
นั่นเพิ่งกำจัดที่ซ่อนของฉัน ฉันอยากจะกลับไปหามัน
Philip Rego

3
นี่คือคำตอบที่ฉันต้องการ แต่สำหรับคนอื่น ๆ ที่เห็นสิ่งนี้คุณจะสูญเสียการเปลี่ยนแปลงที่ซ่อนไว้ สิ่งนี้มีประโยชน์หากคุณกำลังมีปัญหากับที่เก็บแรก แต่ต้องการกำจัดที่ซ่อนแรกเพื่อใช้การเปลี่ยนแปลงที่ซ่อนอยู่ในระดับที่สองที่ลึกกว่าของคุณ
Corey Schnedl

9

มันง่ายกว่าคำตอบที่ยอมรับมาก คุณต้อง:

  1. ตรวจสอบgit statusและยกเลิกการผสานเส้นทางภายใต้มัน แก้ไขข้อขัดแย้ง คุณสามารถข้ามขั้นตอนนี้ได้หากต้องการทำในภายหลัง

  2. git add <filename>เพิ่มไฟล์ทั้งหมดเหล่านี้ภายใต้เส้นทางที่ได้ผสานรวมการจัดทำดัชนีการใช้

  3. git stash popตอนนี้ทำ หากคุณได้รับความขัดแย้งสิ่งเหล่านี้จะต้องได้รับการแก้ไขอีกครั้ง


6
สิ่งนี้นำไปสู่ความขัดแย้งเดิมครั้งแล้วครั้งเล่า
น่าน

7

นี่คือวิธีที่ฉันแก้ไขปัญหา:

  • สถานะ git (ดูการผสมผสานของไฟล์จากที่เก็บก่อนหน้าดึงซ่อนป๊อปและทำงานต่อไป)
  • git stash (ดูปัญหาการผสานความต้องการ)
  • คอมไพล์เพิ่ม (เพิ่มไฟล์เพื่อให้งานของฉันแก้ไขการผสานของฉันเองในเครื่อง)
  • git stash (ไม่มีข้อผิดพลาด)
  • git pull (ไม่มีข้อผิดพลาด)
  • git stash pop (ไม่มีข้อผิดพลาดและทำงานต่อไป)

1
ขอบคุณ ! สิ่งนี้ช่วยฉัน
Julien Baldy

1
ยอดเยี่ยมgit add .โดยไม่ต้องแก้ไขปัญหาให้ฉัน
Paul Carlton

5

หากใครกำลังมีปัญหานี้นอกเหนือจากการผสาน / ความขัดแย้ง / การกระทำอาจเป็นไฟล์ git lock สำหรับโครงการของคุณที่ทำให้เกิดปัญหา

git reset
     fatal: Unable to create '/PATH_TO_PROJECT/.git/index.lock': File exists.
rm -f /PATH_TO_PROJECT/.git/index.lock
git reset
git stash pop

1
ประเภทกลัวresetคำสั่ง คุณช่วยอธิบายได้ไหมว่าทำไมถึงได้ผล
SMBiggs

1

ฉันพบว่าทางออกที่ดีที่สุดคือแยกส่วนที่เก็บของคุณออกและทำการแก้ไขในภายหลัง

git stash branch <branch-name>

หากคุณล้างที่ซ่อนของคุณทิ้งคุณอาจสูญเสียการเปลี่ยนแปลงและคุณจะต้องกลับไปที่ reflog อีกครั้ง


1

คุณต้องเพิ่มapp.coffeeในการจัดเตรียม

ทำgit add app.coffeeแล้วคุณจะสามารถใช้ที่เก็บของคุณได้ (หลังจากนั้นให้คอมมิตและดัน)


0

ที่เก็บได้ถูกนำไปใช้กับไฟล์อื่นแล้ว

เป็นเพียงapp.coffeeการผสานด้วยตนเองเท่านั้น หลังจากนั้นให้เรียกใช้

รีเซ็ตคอมไพล์

เพื่อยกเลิกขั้นตอนการเปลี่ยนแปลงและทำการแฮ็กต่อไป


0

ฉันประสบปัญหาเดียวกันเนื่องจากฉันได้ทำการเปลี่ยนแปลงบางอย่างในสาขาการพัฒนาของฉันและจากนั้นต้องการไปที่สาขาโปรไฟล์ ดังนั้นฉันจึงซ่อนการเปลี่ยนแปลงโดย

git stash

จากนั้นในสาขาโปรไฟล์ฉันได้ทำการเปลี่ยนแปลงบางอย่างแล้วและต้องการกลับมาพัฒนาอีกครั้งดังนั้นฉันจึงต้องซ่อนการเปลี่ยนแปลงอีกครั้งโดย

 git stash

แต่เมื่อฉันเข้ามาพัฒนาสาขาและพยายามคอมไพล์การเปลี่ยนแปลงที่ซ่อนโดย

git stash apply

ดังนั้นฉันจึงได้รับข้อผิดพลาดต้องผสาน

เพื่อแก้ปัญหานี้ก่อนอื่นฉันต้องตรวจสอบรายการที่ซ่อนโดย

git stash list

ดังนั้นมันจึงแสดงรายการของที่ซ่อนในกรณีของฉันมี 2 ที่เก็บชื่อของที่เก็บจะแสดงเช่นนี้ เก็บ @ {0}, ที่เก็บ @ {1}

ฉันต้องการการเปลี่ยนแปลงจาก stash @ {1} ดังนั้นเมื่อฉันพยายามรับโดยคำสั่งนี้

git stash apply stash@{1}

จึงได้รับ ข้อผิดพลาดต้องผสาน

ตอนนี้เพื่อแก้ปัญหานี้ให้ตรวจสอบสถานะของไฟล์ของคุณ

git status

ดังนั้นจึงให้ข้อผิดพลาดว่า "ทั้งคู่แก้ไข" เพื่อแก้ปัญหานี้

git add .

มันจะเพิ่มไฟล์ที่แก้ไขที่หายไปตอนนี้ตรวจสอบสถานะอีกครั้ง

git status 

ดังนั้นตอนนี้ไม่มีข้อผิดพลาดสามารถใช้ที่ซ่อนได้

git stash apply stash@{1}

คุณสามารถทำขั้นตอนนี้สำหรับไฟล์ที่เก็บไว้จำนวนเท่าใดก็ได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.