2012-07-18 13 views
126

Powiedz, że mam plik foo.js, który został popełniony jakiś czas temu. Chciałbym po prostu znaleźć zatwierdzenie, w którym ten plik został najpierw dodany.Znajdź zatwierdzenie, gdzie dodano plik

Po przeczytaniu odpowiedzi i własną majsterkowania, to działa na mnie

git log --follow --diff-filter=A --find-renames=40% foo.js 
+6

Dang, bracie. Masz reputację 1 i wiele dobrych rzeczy na swoim profilu. Musiałeś zrobić trochę trollingu, żeby dostać gdzieś dół. –

+0

Jego konto zostało "tymczasowo" zawieszone na ... kilka lat, jak się wydaje. – msanford

Odpowiedz

203

Oto prostsze, "czysty git" sposób to zrobić, nie ma rurociąg potrzebne:

git log --diff-filter=A -- foo.js 

Sprawdź dokumenty, możesz zrobić to samo dla Usunięte, Zmodyfikowane itp.

Mam przydatny alias do tego, ponieważ zawsze zapomnieć:

git config --global alias.whatadded 'log --diff-filter=A' 

To sprawia, że ​​tak proste, jak:

git whatadded -- foo.js 
+17

+1! Jednak mój plik znajdował się w podfolderze, więc działał tylko po dodaniu gwiazdki z przodu 'git log --diff-filter = A - * podfolder/foo.js' – Geo

+2

Jak to działa w przypadku plików, które zostały scalone z inne gałęzie, ale które niekoniecznie zostały dodane do gałęzi łączonej przez użytkownika dokonującego scalenia? – g33kz0r

13
git log --oneline -- foo.js | tail -n 1 
+1

Byłoby miło mieć '--follow'. –

0

Poniższy może nie jest z ciebie zainteresowanie, ale myślę, że to pomoże Ci w przyszłości i jest częścią debugowania ekosystem w Git:

można użyć git-winę, aby pokazać, co rewizja i autor ostatniej modyfikacji każdej linii pliku especifiqly adnotacji plik Odwiedź https://git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git

ex. git blame -L 174,190 xx.py

+0

Czy mógłbyś wyjaśnić, co robi każdy z operandów? Rozumiem, że podałeś link do odpowiedniego pliku rtfm, ale trochę wyjaśnień sprawiłoby, że twoja poczta jest punktem kompleksowej obsługi. – rossmcm

+0

Książka Pro-Git mówi: Jeśli wykryjesz błąd w kodzie i chcesz się dowiedzieć, kiedy został wprowadzony i dlaczego, adnotacja pliku jest często najlepszym narzędziem. Pokazuje, jaki commit był ostatnim, który modyfikuje każdą linię dowolnego pliku, więc ten przykład, który pokazałem, używa opcji -L, aby ograniczyć wyjście do linii od 174 do 190, a ostatnią rzeczą jest tylko plik docelowy, który chcesz sprawdzić (xx.py) w tym przypadku plik python @rossmcm – Reidel