Pytanie Jak wyświetlić listę wszystkich plików w zatwierdzeniu?


Szukam prostego git Polecenie, które zapewnia ładnie sformatowaną listę wszystkich plików, które były częścią zatwierdzenia przez skrót (SHA1), bez żadnych dodatkowych informacji.

Próbowałem:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

Chociaż wyświetla listę plików, zawiera również niechciane informacje o różnicach dla każdego z nich.

Czy jest inny? git Polecenie, które dostarczy tylko listę, której chcę, aby uniknąć jej analizowania git show wydajność?


2179
2018-01-08 12:26


pochodzenie


Przyszedłem tutaj, szukając czegoś innego. Chcę zobaczyć wszystkie pliki zmodyfikowane dla zestawu zatwierdzeń i zakończone przy użyciu git log --until 2013-05-21 --pretty="short" --name-only z dobrym efektem. - Limited Atonement
Użyj tego polecenia, aby uzyskać wszystkie zmiany z poprzedniego n zobowiązuje się do master: git diff-tree --name-status -r @{3} master - ako


Odpowiedzi:


Preferowany sposób (ponieważ jest to instalacja wodociągowa dowództwo; ma być programowy):

$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js

Inny sposób (mniej preferowane w przypadku skryptów, ponieważ jest to porcelana dowództwo; ma być skierowany do użytkownika)

$ git show --pretty="" --name-only bd61ad98    
index.html
javascript/application.js
javascript/ie6.js

  • The --no-commit-id pomija wyjście ID zatwierdzania.
  • The --pretty argument określa pusty ciąg znaków, aby uniknąć zamieszania na początku.
  • The --name-only Argument pokazuje tylko nazwy plików, których dotyczyło (dziękuję Hank).
  • The -r argumentem jest rekurencja w pod-drzewa

2866
2018-01-08 13:02



Polecenia porcelain nie powinny być używane w skrypcie (git help). Proszę użyć git diff-tree --no-commit-id --name-only -r <commit> zamiast - drizzt
Należy zauważyć że diff-tree nie będzie działać, gdy patrzysz na root commit. - jbranchaud
Zastępowanie --name-onlyopcja z --name-status da bardziej przejrzyste podsumowanie. - Kurt Zhong
Jeśli chcesz, aby działał na głównym zatwierdzeniu, użyj flagi --root. Ze strony podręcznika: "Po określeniu opcji --root początkowe zatwierdzenie zostanie pokazane jako duże zdarzenie tworzenia. Jest to równoważne z różnicą w stosunku do drzewa NULL". - Chris
git log --name-only -n 1 <hash> Ostatnie zatwierdzenie będzie: git log --name-only -n 1 HEAD~1..HEAD - Kurt


Jeśli chcesz uzyskać listę zmienionych plików:

git diff-tree --no-commit-id --name-only -r <commit-ish>

Jeśli chcesz uzyskać listę wszystkich plików w zatwierdzeniu, możesz użyć

git ls-tree --name-only -r <commit-ish>

189
2018-01-14 19:22



Drzewo ls z opcją --name-only nie działa w wersji 1.6.4.4 lub 1.6.3.3. Czy myślisz, że to błąd? - krosenvold
Okazuje się, że uporządkowanie parametrów jest tutaj znaczące. Ten w twoim poście nie działa, podczas gdy ten w twojej odpowiedzi robi działa - przynajmniej dopóki nie zaktualizujesz swojego wpisu;) - krosenvold
Przechodzić --no-commit-id Aby uniknąć drukowania SHA1, tak jak poniżej: git diff-tree --no-commit-id --name-only -r <commit-ish> - John Mellor
@CoDEmanX: Nie przegapisz dodawania -r / -t opcja, prawda? Ponieważ diff-drzewo obsługuje zarówno zmodyfikowane, jak i dodane pliki. Jeśli chcesz wyświetlić listę wszystkich nowych (dodanych) plików, użyj git diff-tree -r --name-only --no-commit-id --diff-filter=A <commit-ish> - Jakub Narębski
Czy nie powinno to być trywialne? - Niklas Rosencrantz


Po prostu to założę gitk nie jest to pożądane. W takim przypadku spróbuj git show --name-only <sha>.


180
2018-01-08 12:34



- onlyname jest mnóstwo w większości przypadków, kiedy tego potrzebowałem; Dlatego wznowiono najkrótsze rozwiązanie (i jedyne, które zapamiętam w 1 próbie). - Erik S
Lub --name-status. - Neil Traft
gitk jest dokładnie tym, za czym byłem - dzięki. to pytanie jest teraz pierwszą rzeczą, która pojawia się w wyszukiwarce Google, więc warto o tym wiedzieć gitk istnieje! Reszta z was może sprawić, że wasza linia poleceń będzie się martwić; Po prostu popatrzę na ten fajny ekran UI :) - Mr Spoon
Jako ktoś, kto naprawdę lubi CLI git, gitk jest właściwie przyzwoitym sposobem przeglądania plików i wyświetlania pliku, na którym znajduje się diff. na przykład Kod sprawdzający zatwierdzenie potworów od partnera. - Elijah Lynn


Osobiście używam kombinacji --stat i --jedna linia z pokazać dowództwo:

git show --stat --oneline HEAD
git show --stat --oneline b24f5fb
git show --stat --oneline HEAD^^..HEAD

Jeśli nie chcesz / chcesz dodać statystyk dotyczących dodawania / usuwania, możesz je zastąpić --stat z - onlyname only

git show --name-only --oneline HEAD
git show --name-only --oneline b24f5fb
git show --name-only --oneline HEAD^^..HEAD

114
2017-07-11 23:21



To jest świetne! Zasadniczo daje to podsumowanie pliku, które Github pokazuje u góry widoku zatwierdzenia. Dzięki. - trisweb
Bardzo dobrze. Aby zdefiniować alias: alias gits='git show --stat --oneline', następnie gits samo pokazuje najnowsze zmiany (w HEAD), podczas gdy gits b24f5fb może być używany do pokazywania zmian każdej wersji. - Brent Faust
Można również utworzyć alias git ... np. być może git config --global alias.changes 'show --stat --oneline'. Następnie możesz wpisać git changes (z opcjonalnym zatwierdzeniem) i uzyskaj dane wyjściowe z pierwszych przykładów powyżej. - lindes
Git dla Windows wymaga podwójnego cudzysłowu: git config --global alias.changes "show --stat --oneline" - Alchemistmatt
Miły. I w przeciwieństwie do zaakceptowanej odpowiedzi, git show działa również w celu sprawdzenia ukrytych zmian: np. git show --stat --oneline stash@{1} - Jeff Ward


Ostatnio musiałem wyświetlić wszystkie zmienione pliki pomiędzy dwoma zatwierdzeniami. Użyłem tego polecenia (także * nix specific)

git show --pretty="format:" --name-only START_COMMIT..END_COMMIT | sort | uniq

Aktualizacja: Lub jak zauważa Ethan poniżej

git diff --name-only START_COMMIT..END_COMMIT

Za pomocą --name-status będzie również zawierać zmiany (dodane, zmodyfikowane, usunięte itp.) obok każdego pliku

git diff --name-status START_COMMIT..END_COMMIT

58
2018-04-26 12:23



Po prostu wypróbowany: Działa dobrze również w git-bash w Windows. - OregonGhost
Jeśli użyjesz git diff --name-status START_COMMIT..END_COMMIT wtedy nie potrzebujesz ciągnięcia |sort | uniq. - Ethan
Korekta powyższego komentarza: git diff --name-only START_COMMIT..END_COMMIT - Ethan
Tego właśnie szukałem. Jak tego użyłem: git diff --name-only START_COMMIT..END_COMMIT | grep -v -e '**.png' -e '**.xml'. Chciałem listę zmian kodu tylko dla ogromnego PR, który dodał tysiące PNG i układów XML. - AutonomousApps


Możesz także zrobić

git log --name-only

i możesz przeglądać różne zatwierdzenia, zatwierdzać wiadomości i zmienione pliki.

Wpisz q, aby odzyskać swój monit.


56
2018-05-27 01:20





Najprostsza forma:

git show --stat (hash)

To łatwiejsze do zapamiętania, a dostarczy Ci wszystkich potrzebnych informacji.

Jeśli naprawdę chcesz tylko nazwy plików, które możesz dodać --name-only opcja.

git show --stat --name-only (hash)


48
2017-07-16 00:06



Chciałbym wiedzieć, dlaczego jeśli moja odpowiedź jest prosta i poprawna, otrzymałem głos negatywny. - VaTo
Gdybym miał ryzykować zgadnięcie (a ja tylko zgaduję, ponieważ to nie ja, który głosowałem na twoją odpowiedź), to dlatego, że oryginalny plakat zażądał tylko listy plików, bez żadnych innych informacji. Podane polecenie wyświetla informacje o zatwierdzeniu i rodzajach zmian wprowadzonych w pliku. Znalazłem twoją odpowiedź przydatną dla czegoś innego, jeśli to jest jakiekolwiek pocieszenie. - J. Gregory Wright
@ J.GregoryPrawda, możesz mieć rację, w tym przypadku dodałbym tylko -name i to wszystko. Używam jednak polecenia, które podałem, ponieważ łatwiej je zapamiętać. Ale na wszelki wypadek opublikuję te dwie opcje, dzięki za sugestię! - VaTo
--name-only nadal będzie zawierać kilka linii nagłówkowych zawierających informacje takie jak autor, data i komunikat zatwierdzenia. - devoured elysium
najlepsza odpowiedź IMO, pozostałe nie są w ogóle zapadające w pamięć. - Amalgovinus


używam zmienione alias dość często. Aby skonfigurować:

git config --global alias.changed 'show --pretty="format:" --name-only'

następnie:

git changed (lists files modified in last commit)   
git changed bAda55 (lists files modified in this commit)
git changed bAda55..ff0021 (lists files modified between those commits)

Podobne polecenia, które mogą być przydatne:

git log --name-status --oneline (very similar, but shows what actually happened M/C/D)
git show --name-only

45
2018-04-29 13:13



awans do aliasu - Clint Eastwood


Używanie standardowego polecenia git diff (również dobre do skryptowania):

git diff --name-only <sha>^ <sha>

Jeśli chcesz również status zmienionych plików:

git diff --name-status <sha>^ <sha>

Działa to dobrze z połączeniami commge.


35
2018-04-29 14:53



jest to zdecydowanie najprostsza odpowiedź, gdy mamy do czynienia z zakresem zatwierdzeń, dla jednego użycia zatwierdzenia git show --name-only <sha> - thebugfinder
(zignoruj ​​mój poprzedni komentarz) jest to zdecydowanie najprostsza odpowiedź w przypadku zakresu zatwierdzeń lub pojedynczego zatwierdzenia. DOBRA ROBOTA! - thebugfinder


$ git log 88ee8 ^ .. 88ee8 --name-only --pretty = "format:"

23
2018-01-08 14:11





Używam tego, aby uzyskać listę zmodyfikowanych plików między dwoma zestawami zmian:

git diff --name-status <SHA1> <SHA2> | cut -f2

15
2018-03-28 07:37



posługiwać się --name-only i możesz pominąć cut dowództwo - Newtonx
Tak, ale status może być całkiem przydatny (dla isntance, możesz chcieć grep, aby wyświetlić wszystkie pliki poza tymi, które zostały usunięte z czymś podobnym git diff --name-status .. | grep ^[^D] | cut -f2 - Pierre-Adrien Buisson