2013-05-17 13 views
99

Mam kilka plików, które zostały usunięte z git. Wprowadziłem pewne zmiany i chciałem je zatwierdzić, ale zdałem sobie sprawę, że zapomniałem najpierw sprawdzić w niezmodyfikowanych plikach. Więc schowałem pliki, a następnie dodałem niezmodyfikowane wersje.Wymusza przechowywanie git, aby nadpisać dodane pliki

Następnie, gdy stosuję skrytkę w repozytorium, pojawiają się konflikty z powodu plików, które zostały już dodane.

Jak zastosować skrytkę i wymusić użycie wersji w skrytce zamiast oryginałów w repozytorium?

Dzięki

+1

rozwiązania Ugly aż ktoś wymyśli lepszego: usunąć nowe pliki za pomocą 'git rm' przed wykonaniem' git chować aplikuj ". – tom

+0

Czy to nie spowoduje utraty historii? Powodem dodania niezmodyfikowanych wersji było zachowanie historii. – Stefan

+0

Nie, nie straci historii. Jeśli usuniesz plik, dodaj go z małą modyfikacją, a następnie zatwierdz, "git" potraktuje to jako małą modyfikację. – tom

Odpowiedz

173

Stosować git checkout zamiast git stash apply:

$ git checkout stash -- . 
$ git commit 

To będzie przywrócić wszystkie pliki w bieżącym katalogu do ich wersji stashed.


Jeśli są zmiany w innych plikach w katalogu roboczego, który powinien być utrzymany, tutaj jest mniej brutalne alternatywa:

$ git merge --squash --strategy-option=theirs stash 

Jeśli są zmiany w indeksie lub scalanie dotknie plików z lokalnymi zmianami, git odmówi scalenia. Poszczególne pliki mogą zostać wyrejestrowany z wykorzystaniem zapas

$ git checkout stash -- <paths...> 

lub interaktywnie z

$ git checkout -p stash 
+0

Dzięki, że to naprawdę pomogło dwóm z nas dzisiaj! – Chad

+0

Żadne z nich nie działało w moim przypadku użycia. Rezultaty i moje rozwiązanie są tutaj http://stackoverflow.com/a/26685296/496046 - to powinno rozwiązać twoją sytuację, @AlexanderBird – tremby

+1

'git checkout stash - .' Ta komenda dosłownie nie zrobiła nic, gdy ją uruchomiłem. –

Powiązane problemy