Відповіді:
У --followроботах для конкретного файлу
git log --follow -- filename
Відмінність від інших наведених рішень
Зауважте, що інші рішення включають git log path(без --follow). Цей підхід є зручним, якщо ви хочете відслідковувати, наприклад, зміни в каталозі , але спотикається, коли файли були перейменовані (таким чином використовуються --follow filename).
--followоблікові записи для перейменувань, тож це надійніше, ніжgit log -- path
--followприймає шлях , який може бути файлом, але також і каталогом. У випадку останнього він запускатиметься рекурсивно та повідомляє про зміни у всіх файлах нижче цієї точки. (Така поведінка не зафіксована на сторінці та не може бути постійною.)
git log filename?
git log filenameне переслідує перейменування файлів, тобто він покаже всі зобов'язання щодо цього імені файлу (не фактичний файл). Якщо ви створили файли Xта Y, змінили обидва, потім видалили Yі перейменували Xна, Yа потім також змінили їх, і ви запустите git log Y, ви отримаєте повідомлення як для старих, так Y і для нових . І навпаки, --followви отримаєте доручення щодо цього файлу, коли він був названий X і коли він був названий Y.
git log pathслід робити те, що ти хочеш. Від git logлюдини :
[--] <path>…
Show only commits that affect any of the specified paths. To prevent confusion with
options and branch names, paths may need to be prefixed with "-- " to separate them
from options or refnames.
Я уважно переглядаю це, і всі ці відповіді, схоже, не показують мені всіх порушень у всіх галузях.
Ось що я придумав, возившись з параметрами перегляду gitk edit. Це показує мені всі зобов’язання для файлу незалежно від гілки, локальної, перемикання та віддаленої.
gitk --all --first-parent --remotes --reflog --author-date-order -- filename
Він також працює з git log:
git log --all --first-parent --remotes --reflog --author-date-order -- filename
--reflogвключає комітети, які були переоформлені / змінені або відхилені іншим чином. Можливо, це повинно бути очевидним, але я спробував це використати git logі намагався з'ясувати, чому я бачу, здавалося б, дублювання комітетів!
Використовуйте команду нижче, щоб отримати коміти для конкретного файлу:
git log -p filename
git log -p mybranch -- filenameабо просто використовувати git log --all -- filenameдля перегляду всіх гілок.
Він повинен бути таким же простим, як і git log <somepath>; перевірити manpage ( git-log(1)).
Особисто мені подобається використовувати, git log --stat <path>щоб я міг бачити вплив кожного комітету на файл.
-pякщо ви хочете побачити повну різницю, а не лише те, що в ній була змінена деяка кількість рядків.
git showпро конкретні комісії, схожі на те, що вони мають значення.
Крім того, (оскільки Git 1.8.4), також можна просто отримати всі коміти, які змінили певну частину файлу. Це можна отримати, передавши початковий рядок і номер закінчуючого рядка.
Результатом повернення буде перелік комісій, що змінили цю конкретну частину. Команда виглядає так:
git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>
де upperLimitє start_line_numberі lowerLimitєending_line_number
Детальніше - https://www.techpurohit.com/list-some-useful-git-commands
Як зазначав jackrabb1t, --followвін більш надійний, оскільки продовжує перераховувати історію за межами перейменованих / переміщених. Отже, якщо ви шукаєте файл, який наразі не перебуває на тому самому шляху, або файл, який був перейменований протягом різних комітетів, --follow відстежує його.
Це може бути кращим варіантом, якщо ви хочете візуалізувати зміни імені / шляху:
git log --follow --name-status -- <path>
Але якщо ви хочете більш компактний список з лише важливим:
git log --follow --name-status --format='%H' -- <path>
або навіть
git log --follow --name-only --format='%H' -- <path>
Мінусом є те, що --followпрацює лише для одного файлу.
--followпрацює для єдиного шляху , який може бути каталогом. Якщо передано каталог, він запуститься рекурсивно і повідомить про зміни у всіх файлах нижче цієї точки.
Якщо ви намагаєтесь - наступний файл, видалений у попередньому використанні комісії
git log --follow -- filename
gitновачків: Використовуйте і git log -p --follow -- filenameдля відображення змін. Також зверніть увагу: "ім'я файлу" може бути файлом, каталогом або підмодулем.
Якщо ви хочете переглянути всі комісії, які змінили файл, у всіх гілках, використовуйте це:
git log --follow --all <filepath>
Якщо ви хочете шукати всі зобов’язання, filenameа не filepath , скористайтеся:
git log --all -- '*.wmv'
Якщо ви хочете побачити всі зміни, внесені у коміти, які змінили певний файл (а не лише зміни самого файлу), ви можете передати --full-diff:
git log -p --full-diff [branch] -- <path>
[branch]
gitk <path_to_filename>
Якщо припустити, що пакет "gitk" вже встановлений.
Якщо він не встановлений, зробіть це:
sudo apt-get install gitk
А потім спробуйте вказану вище команду. Це для Linux ... Це може допомогти користувачам Linux, якщо вони хочуть GUI.
gitkв комплекті з Git для Windows.
Щоб просто отримати список використання хешей комітів git rev-list
git rev-list HEAD <filename>
Вихід:
b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1
e3920ac6c08a4502d1c27cea157750bd978b6443
ea62422870ea51ef21d1629420c6441927b0d3ea
4b1eb462b74c309053909ab83451e42a7239c0db
4df2b0b581e55f3d41381f035c0c2c9bd31ee98d
що означає, що 5 файлів торкнулися цього файлу. Це зворотний хронологічний порядок, тож перша фіксація у списку b7c4f0d7є останньою.
У Linux ви можете використовувати gitk для цього.
Його можна встановити за допомогою "sudo apt-get install git-gui gitk". Його можна використовувати для перегляду команд певного файлу за допомогою "gitk <Filename>".
# Shows commit history with patch
git log -p -<no_of_commits> --follow <file_name>
# Shows brief details like "1 file changed, 6 insertions(+), 1 deletion(-)"
git log --stat --follow <file_name>