2012-11-19 6 views
17

Popełniłem błąd polegający na uaktualnieniu projektu Visual Studio w latach 2008-2010 bez uprzedniego sprawdzenia moich wcześniejszych zmian. Z tego powodu mam ogromny plik wygenerowany przez system (10k + linie), który zmienił co czwartą linię.Przejdź do następnego zmodyfikowanego pliku w git diff?

Zwykle jestem dość dobry o sprawdzenie w rzeczy często, więc zazwyczaj wystarczy użyć przycisku w dół, aby przewinąć moich zmian. W takim przypadku przeglądanie zmian w pliku wygenerowanym przez system zajmie kilka wcieleń.

Czy istnieje sposób, aby przejść do następnego zmodyfikowanego pliku po wykonaniu git diff, aby nie trzeba było przewijać każdej zmiany w każdym pliku?

+0

można po prostu użyć 'git diff fileName' jeśli masz mały zestaw zmian. – zbrunson

+0

Chciałbym zobaczyć wszystkie pliki, które zostały zmodyfikowane, po prostu pomiń gigantyczny ... –

Odpowiedz

31

Domyślnie git diff Rury jego wyjście poprzez less. Możesz więc użyć poleceń less, aby wyszukać następny nagłówek. Wpisz /^diff i naciśnij Wpisz, aby przejść do następnego pliku.

+1

Czy muszę najpierw opuścić mój obecny diff? Próbowałem zrobić to z poziomu mojego bieżącego pliku diff i napisałem "Nie znaleziono wzorca" –

+1

Komenda '/' wyszukuje aktualną pozycję, na którą patrzysz. Więc jeśli otrzymasz ten komunikat, nie ma dalszych linii, które zaczynają się od 'diff' na wyjściu. –

+0

Właściwie brzmi to, jak * naprawdę * chcesz zrobić, to podzielić te (niezatwierdzone) zmiany na dwie osobne zatwierdzenia. Wykonaj 'git add large.file.name', a następnie' git commit', a następnie wszystkie pozostałe zmiany pozostaną inne pliki, które * nie są * dużymi. –

0

Innym rozwiązaniem jest wywołanie komendy update-index i poinformować go udawać, że jeden gigant plik nie uległ zmianie. Jest bardziej kompletny przykład here.

1

Sugeruję używanie tig. To interfejs curses dla git i bardzo dobry.

Z tig status można sprawdzić stan indeksu, a naciskając Wprowadź na każdy z plików, widać to diff. h pokazuje menu pomocy, ale jest to interfejs oparty na skrótach vi.

Myślę, że w dowolnej dystrybucji opartej na debiucie można po prostu apt-get install go, lub można go z połączonej witryny.

+2

Domyślnie 'tig' nie pozwala ci szybko przeskakiwać pomiędzy plikami, ale możesz to zrobić z następującym wiązaniem:' bind diff F:/^ \ + \ + \ + ' – VitalyB

+1

@VitalyB dzięki za to - jestem zaskoczony, nie ma domyślnego powiązania dla niego. Dla przyszłych SOERS z powyższym 'shift + f' będzie szukać następnego pliku. Ponieważ nie jest to wyszukiwanie, 'n' przeniesie się do następnego pliku, a' shift + n' przeniesie do poprzedniego pliku. – Samaursa

+0

ma na celu "od szukania" również, "bind diff' przestał działać dla mnie.Nie wiem dlaczego, ale działa to: 'bind stage F:/^ \ + \ + \ +' – Samaursa

3

Do innych przydatnych rozkazów typu h za pomocą (będąc w git diff, który jest w less).

W szczególności:

      JUMPING 

    g < ESC-<  * Go to first line in file (or line N). 
    G > ESC->  * Go to last line in file (or line N). 
    p %    * Go to beginning of file (or N percent into file). 
    t     * Go to the (N-th) next tag. 
    T     * Go to the (N-th) previous tag. 
    { ( [   * Find close bracket }) ]. 
    } ) ]   * Find open bracket { ([. 
    ESC-^F <c1> <c2> * Find close bracket <c2>. 
    ESC-^B <c1> <c2> * Find open bracket <c1> 
Powiązane problemy