git stash i git pull

92

Jestem nowy w Git i używam wtyczki EGit eclipse do zatwierdzania.

Zmodyfikowałem kilka plików i ukryłem zmiany, a następnie zrobiłem git pullw linii poleceń, która wyciągnęła wszystkie najnowsze zatwierdzenia. Potem zrobiłem Apply stashed changesz EGit. Teraz zastosował moje zmiany, a zmiany, które wyciągnął z ostatniego zatwierdzenia przechowywanych plików, wyszły. Nie jestem pewien, dlaczego nie zapytał mnie o konflikty scalania i nadpisał moje zmiany i utracił poprzednie zmiany zatwierdzeń.

Jak uzyskać te zmiany?

Lolly
źródło
To nie brzmi wiarygodnie. Zastosowana skrytka wprowadza niekonfliktowane zmiany lub powoduje konflikty scalania. Myślę, że zapomniałeś o czymś wspomnieć. Możesz także powtórzyć swoje kroki, najprawdopodobniej twoja skrytka nadal znajduje się na liście, użyj, git stash listaby ją pokazać.
kan

Odpowiedzi:

215

Po wprowadzeniu zmian w kopii roboczej z wiersza poleceń wykonaj:

git stash 

Spowoduje to ukrycie zmian i wyczyszczenie raportu o stanie

git pull

Spowoduje to pobranie zmian z gałęzi upstream. Upewnij się, że w raporcie jest napisane „Przewiń do przodu”. Jeśli tak nie jest, prawdopodobnie wykonujesz niezamierzone scalanie

git stash pop

Spowoduje to zastosowanie ukrytych zmian z powrotem do kopii roboczej i usunięcie zmian z magazynu, chyba że wystąpią konflikty. W przypadku konfliktu pozostaną w skrytce, więc w razie potrzeby możesz zacząć od nowa.

jeśli chcesz zobaczyć, co masz w skrytce

git stash list
yilmazhuseyin
źródło
@java_newbie, Jeśli chcesz to zrobić ze stash i pull no, nie ma sposobu. Ale możesz osiągnąć ten sam wynik dzięki rebase. Polecenie „git rebase origin / <nazwa gałęzi upstream>” powinno zrobić to samo.
yilmazhuseyin
5
Myślę, że to wystarczy:git stash && git pull && git stash pop
Fabrice Kabongo
@yilmazhuseyin Co rozumiesz przez „ten sam wynik” Czy możesz opowiedzieć anegdotę, jeśli możesz? Czy chodziło Ci git rebase origin/masterprzyniesie taki sam wynik jak git stash; git pull; git stash pop?
nehem
9
Jeśli używasz Git v2.9.0 lub nowszej wersji, spróbuj git pull --rebase --autostash. Do Twojej wiadomości
momocow
1
Czy --autostashzawsze działa? Na przykład, jeśli mam nieśledzone pliki, które są już częściowo w Git?
qräbnö