Git stash pop- cần hợp nhất, không thể làm mới chỉ mục


116

Tôi không thể mở kho của mình vì tôi đã hợp nhất một nhánh dường như xung đột với kho của tôi và bây giờ kho của tôi dường như không thể được mở.

app.coffee: needs merge
unable to refresh index

Bất cứ ai biết làm thế nào để giải quyết điều này?

ĐÃ SỬA!

Hóa ra vấn đề thực sự là một xung đột hợp nhất chưa được giải quyết từ việc hợp nhất, KHÔNG PHẢI rằng kho lưu trữ sẽ gây ra xung đột hợp nhất.

Giải pháp: Cam kết tệp bị xung đột.


6
Điều thú vị là câu trả lời được chấp nhận rất phức tạp trong khi giải pháp thực tế khá dễ dàng: bạn thậm chí không cần phải cam kết tệp bị xung đột mà hãy thêm nó vào.
Javi V

3
Thêm câu trả lời của bạn dưới dạng câu trả lời không có trong câu hỏi.
Đen

Câu trả lời:


67

Đầu tiên, hãy kiểm tra git status.
Như OP đã đề cập,

Vấn đề thực tế là một xung đột hợp nhất chưa được giải quyết từ việc hợp nhất, KHÔNG PHẢI là việc lưu trữ sẽ gây ra xung đột hợp nhất.

Đó là nơi git statussẽ đề cập đến tệp đó là " both modified"

Giải pháp: Cam kết tệp bị xung đột.


Bạn có thể tìm thấy một tình huống tương tự 4 ngày trước tại thời điểm viết câu trả lời này (ngày 13 tháng 3 năm 2012) với bài đăng này: " 'Không thể kéo vì bạn có tệp chưa được hợp nhất' ":

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

Những gì bạn đã làm là để khắc phục xung đột hợp nhất (chỉnh sửa tệp phù hợp và cam kết nó):
Xem " Làm cách nào để khắc phục xung đột hợp nhất trong Git? "

Những gì tác giả của bài đăng trên blog đã làm là:

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.

Tức là hủy hợp nhất hiện tại hoàn toàn, cho phép git stash popáp dụng.
Xem " Hủy hợp nhất trong Git ".

Đó là hai lựa chọn của bạn.


1
Đôi khi nó cũng xảy ra chúng tôi ở một chi nhánh khác. Ví dụ, tôi có chi nhánh A và thực hiện một số thay đổi và chuyển sang chi nhánh B và thực hiện các thay đổi và cam kết chúng. Bây giờ tôi muốn đến chi nhánh A nhưng quên thanh toán ở A và cố gắng áp dụng kho. Trong trường hợp này, nó cũng đưa ra vấn đề tương tự. Tôi phải đối mặt với vấn đề này trong trường hợp trên.
Kapil Verma,

Tôi đã cam kết mọi thứ nhưng 'git bash pop' mang lại những xung đột đó. Tôi không hiểu tại sao tôi phải cam kết dù sao khi tôi không muốn thực hiện các thay đổi đối với bach hiện tại. Tôi chỉ muốn quay trở lại nhánh đã cất giữ.
Philip Rego

@PhilipRego git bash pop? hay git stash pop? Hãy thử kiểm tra kho lưu trữ thay vì sử dụng git stash: stackoverflow.com/a/16625128/6309
VonC

Xin lỗi có nghĩa là 'git stash pop'. Tôi đã bỏ kho lưu trữ rồi, nhưng tôi sẽ thử lần sau khi gặp sự cố này. Cảm ơn bạn
Philip Rego

14

Tôi đang gặp sự cố này, sau đó giải quyết xung đột và cam kết, và làm git stash poplại là khôi phục lại cùng một kho lưu trữ (gây ra xung đột tương tự :-().

Điều tôi phải làm (CẢNH BÁO: sao lưu kho của bạn trước) là git stash droploại bỏ nó.


4
Điều đó chỉ thoát khỏi kho của tôi. Tôi muốn quay lại với nó.
Philip Rego

3
Đây là câu trả lời mà tôi cần, nhưng đối với những người khác thấy điều này, bạn sẽ mất các thay đổi đã lưu trữ của mình. Điều này rất hữu ích nếu bạn đang gặp vấn đề với kho lưu trữ đầu tiên, nhưng thực sự muốn loại bỏ lưu trữ đầu tiên để áp dụng các thay đổi lưu trữ cấp độ thứ hai sâu hơn của bạn.
Corey Schnedl

8

Nó đơn giản hơn nhiều so với câu trả lời được chấp nhận. Bạn cần phải:

  1. Kiểm tra git statusvà hủy hợp nhất các đường dẫn dưới nó. Khắc phục các xung đột. Bạn có thể bỏ qua bước này nếu muốn thực hiện sau.

  2. Thêm tất cả các tệp này theo đường dẫn không hợp nhất để lập chỉ mục bằng cách sử dụng git add <filename>.

  3. Bây giờ làm git stash pop. Nếu bạn nhận được bất kỳ xung đột nào, những điều này sẽ lại cần được giải quyết.


6
Điều này dẫn đến xung đột giống nhau lặp đi lặp lại.
NaN,

7

Đây là cách tôi giải quyết vấn đề:

  • trạng thái git (xem hỗn hợp các tệp từ kho lưu trữ trước đó, kéo, cửa sổ bật lên lưu trữ và công việc tiếp tục.)
  • git stash (xem vấn đề hợp nhất nhu cầu)
  • git thêm. (thêm các tệp để công việc của tôi giải quyết cục bộ được hợp nhất của riêng tôi)
  • git stash (không có lỗi)
  • git pull (không có lỗi)
  • git stash pop (không có lỗi và tiếp tục hoạt động)

1
Cám ơn ! cái này giúp tôi với.
Julien Baldy

1
Tuyệt vời, git add .không cần cam kết đã khắc phục được sự cố cho tôi.
Paul Carlton

5

Nếu bất kỳ ai đang gặp sự cố này bên ngoài hợp nhất / xung đột / hành động, thì đó có thể là tệp khóa git cho dự án của bạn gây ra sự cố.

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
Kiểu sợ resetlệnh. Bạn có thể giải thích tại sao điều này sẽ hoạt động?
SMBiggs

1

Tôi nhận thấy rằng giải pháp tốt nhất là phân nhánh kho lưu trữ của bạn và thực hiện giải pháp sau đó.

git stash branch <branch-name>

nếu bạn bỏ qua kho lưu trữ của mình, bạn có thể mất các thay đổi của mình và bạn sẽ phải quay lại bản cập nhật.


1

Bạn cần thêm app.coffeevào dàn.

Làm git add app.coffeevà sau đó bạn sẽ có thể áp dụng kho của mình (sau khi cam kết và đẩy).


0

Kho lưu trữ đã được áp dụng cho các tệp khác.

Nó chỉ app.coffeelà bạn phải hợp nhất thủ công. Sau đó chỉ cần chạy

git đặt lại

để loại bỏ các thay đổi và tiếp tục hack.


0

Tôi gặp phải vấn đề tương tự vì tôi đã thực hiện một số thay đổi trong nhánh phát triển của mình và sau đó muốn chuyển đến nhánh hồ sơ. vì vậy tôi đã lưu trữ những thay đổi bằng cách

git stash

sau đó trong nhánh hồ sơ, tôi cũng đã thực hiện một số thay đổi và sau đó muốn quay lại lần nữa để phát triển nên tôi phải lưu trữ các thay đổi một lần nữa bằng cách

 git stash

nhưng khi tôi đến phát triển chi nhánh và cố gắng git các thay đổi kho lưu trữ bằng cách

git stash apply

vì vậy tôi gặp lỗi cần hợp nhất

để giải quyết vấn đề này trước tiên tôi phải kiểm tra danh sách lưu trữ bằng cách

git stash list

vì vậy nó hiển thị danh sách các kho trong trường hợp của tôi có 2 kho tên của các kho đang hiển thị như thế này stash @ {0}, stash @ {1}

Tôi cần thay đổi từ stash @ {1} vì vậy khi tôi cố gắng lấy nó bằng lệnh này

git stash apply stash@{1}

vì vậy đã nhận được lỗi cần hợp nhất

vì vậy bây giờ để giải quyết vấn đề này, hãy kiểm tra trạng thái tệp của bạn

git status

vì vậy nó đã đưa ra lỗi "cả hai đều được sửa đổi" để giải quyết lần chạy này

git add .

nó sẽ thêm các tệp sửa đổi bị thiếu bây giờ một lần nữa kiểm tra trạng thái

git status 

vì vậy bây giờ không có lỗi bây giờ có thể áp dụng stash

git stash apply stash@{1}

bạn có thể thực hiện quá trình này cho bất kỳ số lượng tệp lưu trữ nào.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.