2013-05-08 10 views
11

Chciałbym przechować zmiany tylko zmiany w bieżącym folderze i jego podfolderach. Jak mogę to osiągnąć?Jak zmienić zmiany w folderze bieżącym

Próbowałem oczywistego podejścia - git stash ., ale wydaje się nie działać.

Wiem, że mogę utworzyć tymczasowe zatwierdzenia i usunąć je później, ale chcę wiedzieć, czy git stash obsługuje ukrywanie określonych folderów.

+0

Jaki jest błąd, który otrzymujesz? – Shobit

+0

@Shobit Otrzymuję sekcję pomocy dla polecenia 'git stash' – stdcall

+0

Nie możesz. 'git stash' odkłada na bok niezatwierdzone zmiany w drzewie roboczym. –

Odpowiedz

10

git stash nie pozwoli ci zapisać częściowych katalogów za pomocą pojedynczego polecenia, ale jest kilka alternatyw.

Możesz użyć git stash -p, aby wybrać tylko różnice, które chcesz ukryć.

Jeśli wyjście git stash -p jest ogromne i/lub chcesz mieć rozwiązanie skryptowe i dopuszczalne jest tworzenie tymczasowych zatwierdzeń, możesz utworzyć zatwierdzenie ze wszystkimi zmianami oprócz tych w podkatalogu, a następnie ukryć zmiany, i cofnij zatwierdzenie. W kodzie:

git add -u :/ # equivalent to (cd reporoot && git add -u) without changing $PWD 
git reset HEAD . 
git commit -m "tmp" 
git stash  # this will stash only the files in the current dir 
git reset HEAD~ 
+0

Próbowałem, nie ma mowy ... musi być lepszy sposób – stdcall

+0

@Mellowcandle Na czym polega problem? Dlaczego nie działa? –

+0

Wyświetla różnicę wszystkich zmian w drzewie projektu, a następnie muszę ręcznie wybrać, które pliki znajdują się w określonym folderze, który chcę. Nie znam nawet nazw plików w tym folderze. to nie jest opłacalne rozwiązanie mojego problemu. – stdcall

5

ten powinien pracować dla Ciebie:

cd <repo_root> 
git add .   # add all changed files to index 
cd my_folder 
git reset .  # except for ones you want to stash 
git stash -k  # stash only files not in index 
git reset   # remove all changed files from index 

Zasadniczo, to dodaje wszystkie zmienione pliki do indeksu, z wyjątkiem folderu (lub pliki), które chcesz schować. Następnie przechowuje się je przy użyciu -k (--keep-index). Na koniec resetujesz indeks do miejsca, w którym zacząłeś.

+3

To faktycznie zrobi coś innego: 'git stash -k 'pozostawi indeks w stanie nienaruszonym, więc zmiany w indeksie nie zostaną usunięte, ale nowa skrytka będzie miała ** ** zmiany z indeksu ** i **, które nie są w nim zawarte, więc będzie to" pełna " "ukryj w każdym przypadku. –

-1

Moglibyście wypróbować jeden z interfejsów GIT GUI, takich jak SourceTree lub TortoiseGit, rzeczy takie jak ja osobiście przechodzą do żółwia, ponieważ kończy się to znacznie szybciej niż próba wykonania wielu poleceń z linii poleceń.

+4

Nie widziałeś, że pracuję na terminalu ... pracuję naprawdę szybko – stdcall

Powiązane problemy