Git stash pop - wymaga scalenia, nie można odświeżyć indeksu

116

Nie mogę otworzyć skrytki, ponieważ połączyłem gałąź, która najwyraźniej koliduje z moją skrytką, a teraz najwyraźniej nie można jej otworzyć.

app.coffee: needs merge
unable to refresh index

Czy ktoś wie, jak to rozwiązać?

NAPRAWIONY!

Okazuje się, że faktycznym problemem był nierozwiązany konflikt podczas scalania, a NIE to, że skrytka powodowała konflikt podczas scalania.

Rozwiązanie: Zatwierdź plik będący w konflikcie.

RandallB
źródło
6
Ciekawe, że zaakceptowana odpowiedź jest złożona, podczas gdy rzeczywiste rozwiązanie jest dość proste: nie musisz nawet zatwierdzać pliku będącego w konflikcie, ale go dodać.
Javi V
3
Dodaj swoją odpowiedź jako odpowiedź, której nie ma w pytaniu.
Czarny

Odpowiedzi:

67

Najpierw sprawdź git status.
Jak wspomina PO,

Rzeczywistym problemem był nierozwiązany konflikt podczas scalania, a NIE to, że skrytka powodowała konflikt scalania.

W tym miejscu git statuswspomniałby o tym pliku jako „ both modified

Rozwiązanie: Zatwierdź plik będący w konflikcie.


Podobną sytuację można znaleźć 4 dni temu w czasie pisania tej odpowiedzi (13 marca 2012 r.) W tym poście: " 'Pull nie jest możliwe, ponieważ masz niescalone pliki' ":

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

To, co zrobiłeś, to naprawienie konfliktu scalania (edytowanie odpowiedniego pliku i zatwierdzenie go):
Zobacz „ Jak naprawić konflikty podczas scalania w Git?

Co zrobił autor posta na blogu:

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.

To znaczy całkowite przerwanie bieżącego scalania, pozwalające na git stash popzastosowanie.
Zobacz „ Przerwanie scalania w Git ”.

To są twoje dwie opcje.

VonC
źródło
1
Czasami zdarza się też, że jesteśmy w innej branży. Na przykład mam gałąź A i dokonałem pewnych zmian, przełączyłem się na gałąź B, dokonałem zmian i zatwierdziłem je. Teraz chcę przejść do gałęzi A, ale zapomniałem przejść do kasy na A i próbować użyć skrytki. W tym przypadku również daje ten sam problem. Miałem do czynienia z tym problemem w powyższym przypadku.
Kapil Verma
Popełniłem wszystko, ale „git bash pop” przywraca te konflikty. I tak nie rozumiem, dlaczego miałbym się angażować, skoro nie chcę wprowadzać zmian w obecnym bachu. Chcę tylko wrócić do schowanej gałęzi.
Philip Rego
@PhilipRego git bash pop? lub git stash pop? Spróbuj sprawdzić skrytkę zamiast korzystać ze skrytki git: stackoverflow.com/a/16625128/6309
VonC
Przepraszam oznaczało „git stash pop”. Upuściłem już skrytkę, ale spróbuję następnym razem, gdy będę miał ten problem. Dziękuję
Philip Rego
14

Miałem ten problem, a następnie rozwiązałem konflikt i zatwierdziłem, a robiłem git stash popponownie, przywracając tę ​​samą skrytkę (powodując ten sam konflikt :-().

To, co musiałem zrobić (UWAGA: najpierw wykonaj kopię zapasową skrytki), to git stash dropsię go pozbyć.

knocte
źródło
4
To właśnie pozbyło się mojego zapasu. Chciałem do tego wrócić.
Philip Rego
3
To jest odpowiedź, której potrzebowałem, ale dla innych ludzi, którzy to zobaczą, stracisz ukryte zmiany. Jest to przydatne, jeśli masz problemy z pierwszą skrytką, ale naprawdę chcesz pozbyć się pierwszej skrytki, aby zastosować głębsze ukryte zmiany drugiego poziomu.
Corey Schnedl
9

To znacznie prostsze niż zaakceptowana odpowiedź. Musisz:

  1. Sprawdź git statusi rozdziel ścieżki pod nim. Rozwiąż konflikty. Możesz pominąć ten krok, jeśli wolisz zrobić to później.

  2. Dodaj wszystkie te pliki do niescalonych ścieżek do indeksowania przy użyciu git add <filename>.

  3. Teraz zrób git stash pop. Jeśli pojawią się jakiekolwiek konflikty, należy je ponownie rozwiązać.

ayushgp
źródło
6
Prowadzi to do tego samego konfliktu.
NaN
7

Oto jak rozwiązałem ten problem:

  • stan git (zobacz połączenie plików z poprzedniego magazynu, ściągnięcia, przechowania pop i kontynuacji pracy).
  • git stash (zobacz problem z scalaniem potrzeb)
  • git add. (dodaj pliki, aby moja praca lokalnie rozwiązała moje własne scalone)
  • git stash (bez błędu)
  • git pull (bez błędu)
  • git stash pop (bez błędu i kontynuuj pracę)
Adam
źródło
1
Dzięki ! to mi pomóż.
Julien Baldy
1
Doskonale, git add .bez zobowiązania rozwiązuje problem za mnie.
Paul Carlton
5

Jeśli ktoś ma ten problem poza scalaniem / konfliktem / akcją, może to być plik blokady git dla Twojego projektu, który powoduje problem.

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
StevieJayCee
źródło
1
Trochę się boi resetpolecenia. Czy możesz wyjaśnić, dlaczego to zadziała?
SMBiggs
1

Przekonałem się, że najlepszym rozwiązaniem jest odgałęzienie się i późniejsze rozwiązanie.

git stash branch <branch-name>

jeśli upuścisz lub wyczyścisz skrytkę, możesz stracić wprowadzone zmiany i będziesz musiał wrócić do reflogu.

Julian Tellez
źródło
1

Musisz dodać app.coffee do inscenizacji.

Zrób, git add app.coffeea będziesz mógł zastosować swoją skrytkę (po tym zatwierdzeniu i push).

Edvard Munch
źródło
0

Skrytka została już zastosowana do innych plików.

Tyle tylko, app.coffeeże musisz scalić ręcznie. Potem po prostu biegnij

reset git

aby wycofać zmiany i hakować dalej.

Vinodagouda Patil
źródło
0

Miałem ten sam problem, ponieważ dokonałem pewnych zmian w mojej gałęzi deweloperskiej, a następnie chcę przejść do gałęzi profilu. więc przechowuję zmiany do

git stash

następnie w gałęzi profilu również dokonałem pewnych zmian, a następnie chcę wrócić do tworzenia, więc muszę ponownie przechowywać zmiany,

 git stash

ale kiedy przyszedłem rozwinąć gałąź i próbowałem zdobyć zmiany w magazynie

git stash apply

więc otrzymywałem błąd, trzeba scalić

Aby rozwiązać ten problem, najpierw muszę sprawdzić listę skrytek

git stash list

więc pokazuje listę skrytek w moim przypadku były 2 skrytki nazwa tych skrytek wyświetla się jak ten skrytka @ {0}, skrytka @ {1}

Potrzebuję zmian ze stash @ {1}, więc kiedy próbuję uzyskać to za pomocą tego polecenia

git stash apply stash@{1}

więc otrzymywanie błędu wymaga scalenia

więc teraz, aby rozwiązać ten problem, sprawdź stan swoich plików

git status

więc dawał błąd, że "oba zmodyfikowano", aby rozwiązać ten przebieg

git add .

teraz doda brakujące zmodyfikowane pliki i ponownie sprawdzi status

git status 

więc teraz nie ma błędu, teraz można zastosować skrytkę

git stash apply stash@{1}

możesz wykonać ten proces dla dowolnej liczby plików ukrytych.

Mudassir Khan
źródło