Ответ 1
Для этого я бы использовал:
gitk [filename]
или следовать имени файла прошлых переименований
gitk --follow [filename]
Как просмотреть историю изменений отдельного файла в Git, детализировать с измененным?
Дошел до:
git log -- [filename]
который показывает мне историю фиксации файла, но как я могу получить содержимое каждого из изменений файла?
Я пытаюсь сделать переход от MS SourceSafe, и это было просто right-click
→ show history
.
Для этого я бы использовал:
gitk [filename]
или следовать имени файла прошлых переименований
gitk --follow [filename]
Вы можете использовать
git log -p filename
чтобы git генерировать патчи для каждой записи журнала.
См
git help log
для большего количества опций - на самом деле это может сделать много приятных вещей:) Чтобы получить только разницу для конкретной фиксации, вы можете
git show HEAD
или любую другую ревизию по идентификатору. Или используйте
gitk
для визуального просмотра изменений.
git log --follow -p -- path-to-file
Это покажет всю историю файла (включая историю после переименований и различия для каждого изменения).
Другими словами, если файл с именем bar
когда-то назывался foo
, то в git log -p bar
(без опции --follow
) будет отображаться только история файла до того места, где он был переименован - он не будет отображаться история файлов, когда она была известна как foo
. Используя git log --follow -p bar
покажет всю историю файла, включая любые изменения в файле, когда он был известен как foo
. Опция -p
обеспечивает включение различий для каждого изменения.
Если вы предпочитаете оставаться в текстовом режиме, вы можете использовать tig.
Быстрая установка:
# apt-get install tig
$ brew install tig
Используйте его для просмотра истории в одном файле: tig [filename]
Или просмотрите подробную историю репо: tig
Похож на gitk
, но на основе текста. Поддержка цветов в терминале!
git whatchanged -p filename
также эквивалентно git log -p filename
в этом случае.
Вы также можете увидеть, когда определенная строка кода внутри файла была изменена с помощью git blame filename
. Это напечатает короткий идентификатор фиксации, автора, метку времени и полную строку кода для каждой строки в файле.
Это очень полезно после того, как вы нашли ошибку и хотите узнать, когда она была введена (или кто это был).
Если вы используете SourceTree для визуализации своего репозитория (он бесплатный и неплохой), вы можете щелкнуть правой кнопкой мыши файл и выбрать Выбранный журнал
Дисплей (ниже) намного дружелюбнее, чем gitk, и большинство других перечисленных опций. К сожалению (в это время) нет простого способа запустить это представление из командной строки. В настоящее время CLI SourceTree просто открывает репозитории.
Чтобы показать, какая версия и автор в последний раз модифицировали каждую строку файла:
git blame filename
или если вы хотите использовать мощный графический интерфейс вины:
git gui blame filename
Сводка других ответов после прочтения их и игры немного:
Командой обычной команды будет
git log --follow --all -p dir/file.c
Но вы также можете использовать gitk (gui) или tig (text-ui), чтобы дать гораздо более понятные для человека способы взглянуть на него.
gitk --follow --all -p dir/file.c
tig --follow --all -p dir/file.c
В debian/ubuntu команда установки для этих прекрасных инструментов выглядит так, как ожидалось:
sudo apt-get install gitk tig
И в настоящее время я использую:
alias gdf='gitk --follow --all -p'
чтобы я мог просто набрать gdf dir
, чтобы получить фокусную историю всего в подкаталоге dir
.
Добавьте этот псевдоним в свой .gitconfig:
[alias]
lg = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\n--abbrev-commit --date=relative
И используйте команду следующим образом:
> git lg
> git lg -- filename
Выход будет выглядеть почти точно так же, как вывод gitk. Наслаждайтесь.
В последнее время я обнаружил tig
и нашел его очень полезным. Есть некоторые случаи, я бы хотел, чтобы он делал A или B, но большую часть времени он был довольно аккуратным.
В вашем случае tig <filename>
может быть тем, что вы ищете.
Я написал git-playback для этой цели
pip install git-playback
git playback [filename]
Это позволяет отображать результаты в командной строке (например, git log -p
), а также позволять вам выполнять каждую фиксацию с помощью клавиш со стрелками (например, gitk
).
Или:
gitx -- <path/to/filename>
если вы используете gitx
Если вы хотите просмотреть всю историю файла, в том числе на всех других ветвях, используйте:
gitk --all <filename>
Если вы используете графический интерфейс git (в Windows) в меню "Репозиторий", вы можете использовать "Визуализировать главную историю". Выделите фиксацию в верхней панели и файл в правом нижнем углу, и вы увидите разницу для этой фиксации в левом нижнем углу.
С отличным Git Extensions вы переходите к точке в истории, где файл все еще существует (если он был удален, в противном случае просто перейдите в HEAD), перейдите на вкладку File tree
, щелкните правой кнопкой мыши файл и выберите File history
.
По умолчанию он следует за файлом через переименования, а вкладка Blame
позволяет увидеть имя в данной версии.
Он имеет некоторые незначительные ошибки, например, показывая fatal: Not a valid object name
на вкладке View
при нажатии на удаление, но я могу жить с этим.: -)
Вы также можете попробовать это, в котором перечислены коммиты, которые изменили определенную часть файла (реализовано в Git 1.8.4).
Возвращенным результатом будет список коммитов, которые изменили эту конкретную часть. Команда:
git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>
где upperLimit - начальный_строчный_номер, а нижний_конечный - конечный_линейный_файл файла.
Более подробная информация на https://www.techpurohit.com/list-some-useful-git-commands
Ответ, который я искал, не был в этом потоке, это увидеть изменения в файлах, которые я поставил для фиксации. то есть.
git diff --cached
Если вы используете TortoiseGit, вы сможете щелкнуть правой кнопкой мыши по файлу и сделать TortoiseGit --> Show Log
. В появившемся окне убедитесь, что:
'Show Whole Project
' не проверяется.
'All Branches
'.
Вы можете использовать vscode с GitLens, это очень мощный инструмент. После установки GitLens перейдите на вкладку GitLens, выберите " FILE HISTORY
и вы можете просмотреть его.
git diff -U <filename>
дает вам единый diff.
Он должен быть окрашен в красный и зеленый цвета. Если это не так, выполните сначала git config color.ui auto
.
Если вы используете eclipse с плагином git, у него есть отличное сравнение с историей. Щелкните правой кнопкой мыши файл и выберите "compare with" = > "history"
Pydriller (https://github.com/ishepard/pydriller) работал очень хорошо для меня.