Jak mogę zobaczyć, co zmieniło się w pliku przed przystąpieniem do git?

351

Zauważyłem, że pracując nad jednym lub dwoma biletami, jeśli się odsunę, nie jestem pewien, nad czym pracowałem, co się zmieniło itp.

Czy istnieje sposób, aby zobaczyć zmiany wprowadzone dla danego pliku przed dodaniem, a następnie zatwierdzeniem przez git?

Timothy T.
źródło

Odpowiedzi:

525

Szukasz git diff. W zależności od konkretnej sytuacji istnieją trzy przydatne sposoby jej użycia:

# show differences between index and working tree
# that is, changes you haven't staged to commit
git diff [filename]
# show differences between current commit and index
# that is, what you're about to commit
# --staged does exactly the same thing, use what you like
git diff --cached [filename]
# show differences between current commit and working tree
git diff HEAD [filename]

Będzie działał rekurencyjnie na katalogach, a jeśli nie podano ścieżek, pokazuje wszystkie zmiany.

Cascabel
źródło
1
@ sveilleux2 Nie, po prostu uruchom git diff bez żadnych argumentów - jak mówi ostatnie zdanie odpowiedzi, jeśli nie podano żadnych ścieżek, pokazuje wszystkie zmiany. (Nawiasy [filename]oznaczają opcjonalny argument.) *Pozwalając powłoce na wyświetlenie listy wszystkich plików, więc jeśli jesteś w podkatalogu, dostaniesz tylko rzeczy z tego podkatalogu (nie całe repozytorium), i „ Tęsknię za zmianami w ukrytych plikach.
Cascabel,
# pokaż różnice między bieżącym zatwierdzeniem a indeksem # to znaczy, co zamierzasz zatwierdzić git diff --cached [nazwa pliku] Nie masz na myśli: # pokaż różnice między bieżącym zatwierdzeniem a indeksem #, o co ci chodzi aby popchnąć ? git diff --cached [nazwa pliku]
ofarooq
3
Aby zobaczyć różnice wprowadzone po dodaniu pliku (tj. Po „git add”), wykonaj „git diff --staged [nazwa pliku]”
Sidtharthan
Och, dlaczego to takie skomplikowane ?! Co jeśli mamy kilka tuzinów plików? Po prostu narzekam na interfejs git ... Tak, wydaje się, git add -pjest alternatywą do sprawdzania wszystkich plików.
Kirby,
@Jefromi - zastanów się nad dodaniem git diff --staged [filename]głównej odpowiedzi, ponieważ jest to sytuacja częściej potrzebna.
Lazarus Thurston
39

Użyj git-diff:

git diff yourfile
Felix Kling
źródło
8

Dla mnie git add -pjest to najbardziej przydatny sposób (i moim zdaniem zamierzony przez deweloperów git?), Aby przejrzeć wszystkie niestopniowe zmiany (pokazuje różnicę dla każdego pliku), wybrać dobry zestaw zmian, które powinny iść z zatwierdzeniem, a potem, gdy masz zainscenizował je wszystkie, a następnie użył git commiti powtórzył dla następnego zatwierdzenia. Następnie możesz sprawić, by każde zatwierdzenie było użytecznym lub znaczącym zestawem zmian, nawet jeśli miały miejsce w różnych plikach. Sugerowałbym również utworzenie nowej gałęzi dla każdego biletu lub podobnej aktywności i przełączanie się między nimi za pomocą checkout(być może za pomocą, git stashjeśli nie chcesz zatwierdzać przed zmianą), ale jeśli robisz wiele szybkich zmian, może to być uciążliwe. Nie zapomnij często łączyć.

Reed Hedges
źródło
Więc zamiast git dodaj nazwę pliku, użyj git add -p?
Timothy T.,
1
git add -p to kombinacja inscenizacji, polegająca na oglądaniu zmian, które można wprowadzić, i wybieraniu ich jeden po drugim w interaktywny sposób. Zobacz Zatwierdzanie tylko części pliku w Git, aby uzyskać więcej informacji na temat git add -p.
Angelos Asonitis
5

git diff

Pokaż zmiany między działającym drzewem a indeksem lub drzewem, zmiany między indeksem a drzewem, zmiany między dwoma drzewami lub zmiany między dwoma plikami na dysku.

miku
źródło
Cytat jest trochę za dużo - domyślnie wykonuje pierwsze porównanie: między działającym drzewem a indeksem.
Cascabel,
4

Pamiętaj, że popełniasz zmiany , a nie pliki.

Z tego powodu bardzo rzadko nie używam git add -p(lub odpowiednika magit) do dodawania moich zmian.

Dustin
źródło
2
git NIE radzi sobie ze zmianami - próba myślenia o tym tak, jakby to robiła, jest podstawowym źródłem zamieszania i błędów. git zajmuje się migawkami.
Chris Dodd
3
git diff <path>/filename

ścieżka może być pełną ścieżką systemową do pliku lub
jeśli jesteś w projekcie, wklej zmodyfikowaną ścieżkę pliku również
dla plików zmodyfikowanych z użyciem ścieżki:git status

HariKishore
źródło
2

Mój przypadek, gdy nie chcesz się przejmować listą plików. Po prostu pokaż je wszystkie.

Gdy już uruchomiłeś git addz listą plików:

$ git diff --cached $(git diff --cached --name-only)

W nowszych wersjach gitmożesz --stagedtakże używać , co jest synonimem --cached.

To samo można zastosować w przypadku nie dodanych plików, ale bez --cachedopcji.

$ git diff $(git diff --name-only)

Alias ​​polecenia Git dla opcji „buforowanej”:

$ git config --global alias.diff-cached '!git diff --cached $(git diff --cached --name-only)'
Kirby
źródło
3
Dzięki za szczegóły git diff --cached - name-only było poleceniem, którego szukałem ...
Doogle
1

Przejdź do odpowiedniego repozytorium git, a następnie uruchom poniższe polecenie:

nazwa pliku git diff

Otworzy plik z zaznaczonymi zmianami, naciśnij klawisz powrotu / enter, aby przewinąć plik w dół.

Nazwa pliku PS powinna zawierać pełną ścieżkę do pliku, w przeciwnym razie można uruchomić bez pełnej ścieżki do pliku, przechodząc do odpowiedniego katalogu / folderu pliku

Yash Bansal
źródło
0

Możesz także użyć przyjaznego dla git edytora tekstu. Pokazują kolory na zmodyfikowanych liniach, inny kolor dla linii dodanych, inny kolor dla linii usuniętych itp.

Dobrym edytorem tekstowym, który to robi, jest GitHub's Atom 1.0 .

AskYous
źródło