Как я могу просмотреть историю изменений отдельного файла в Git, полную информацию о том, что изменилось?
Я дошел до:
git log -- [filename]
которая показывает мне историю коммитов файла, но как мне узнать содержание каждого файла?
Я пытаюсь сделать переход от MS SourceSafe, и это было просто right-click
→ show history
.
Ответы:
Для этого я бы использовал:
или следовать имени файла после переименования
источник
Ты можешь использовать
чтобы позволить git генерировать патчи для каждой записи в журнале.
Видеть
для большего количества опций - это может действительно сделать много хороших вещей :) Чтобы получить только diff для определенного коммита, вы можете
или любая другая ревизия по идентификатору. Или использовать
просматривать изменения визуально.
источник
git log --follow -p -- path-to-file
Это покажет всю историю файла (включая историю за переименованием и различия для каждого изменения).
Другими словами, если названный файл
bar
был когда-то названfoo
, тогдаgit log -p bar
(без--follow
опции) будет отображаться только история файла до того момента, когда он был переименован - он не будет отображать историю файла, когда он был известен какfoo
. Использованиеgit log --follow -p bar
покажет всю историю файла, включая любые изменения в файле, когда он был известен какfoo
.-p
Опция гарантирует , что дифференциалы включены для каждого изменения.источник
--follow
гарантирует, что вы видите файл переименовывает (2.)-p
гарантирует, что вы видите, как файл изменяется (3.) это только командная строка.--
был добавлен, но я не знаю, почему это делает это лучше? Что это делает?--
Опция сообщает Git, что она достигла конца опций и что все последующее--
следует рассматривать как аргумент. Дляgit log
этого имеет значение только если у вас есть путь, который начинается с тире . Скажем, вы хотели узнать историю файла с неудачным именем "--follow":git log --follow -p -- --follow
--
это полезно, потому что оно также может защитить от любыхrevision
имен, которые соответствуют введенному вами имени файла, что на самом деле может быть страшно. Например: если у вас есть и ветвь, и файл с именемfoo
,git log -p foo
будет отображаться история журнала gitfoo
, а не история файлаfoo
. Но @DanMoulding прав в том, что поскольку--follow
команда принимает в качестве аргумента только одно имя файла, это менее необходимо, поскольку она не может быть arevision
. Я только что узнал это. Может быть, вы были правы, оставив это без ответа; Я не уверен.Если вы предпочитаете оставаться текстовым, вы можете использовать tig .
Быстрая установка:
# apt-get install tig
$ brew install tig
Используйте его для просмотра истории одного файла.
tig [filename]
Или просмотрите подробную историю репо:
tig
Похоже,
gitk
но на основе текста. Поддерживает цвета в терминале!источник
tig -- path/to/specific/file
git whatchanged -p filename
также эквивалентноgit log -p filename
в этом случае.Вы также можете увидеть, когда была изменена конкретная строка кода внутри файла
git blame filename
. Это выведет короткий идентификатор фиксации, автора, метку времени и полную строку кода для каждой строки в файле. Это очень полезно после того, как вы нашли ошибку и хотите узнать, когда она была обнаружена (или кто виноват в ней).источник
filename
не является обязательным в командеgit blame filename
.Пользователи SourceTree
Если вы используете SourceTree для визуализации своего хранилища (это бесплатно и довольно неплохо), вы можете щелкнуть правой кнопкой мыши файл и выбрать Log Selected
Дисплей (ниже) намного удобнее, чем GITK и большинство других перечисленных опций. К сожалению (в настоящее время) нет простого способа запустить это представление из командной строки - в настоящее время CLI SourceTree просто открывает репозитории.
источник
Чтобы показать, какая ревизия и автор в последний раз изменили каждую строку файла:
или если вы хотите использовать мощный графический интерфейс:
источник
Резюме других ответов после их прочтения и небольшой игры:
Обычная команда командной строки будет
Но вы также можете использовать либо gitk (gui), либо tig (text-ui), чтобы дать гораздо более понятные человеку способы просмотра.
В Debian / Ubuntu, команда install для этих замечательных инструментов выглядит так:
И я в настоящее время использую:
так что я могу просто напечатать,
gdf dir
чтобы получить целевую историю всего в подкаталогеdir
.источник
--all
для всех ветвей, остальное объясняется в ответе @ ДанаДобавьте этот псевдоним в ваш .gitconfig:
И используйте команду так:
Вывод будет выглядеть почти так же, как вывод gitk. Наслаждаться.
источник
git lg -p filename
- он возвращает красивую разность искомого файла.В последнее время я обнаружил
tig
и нашел это очень полезным. В некоторых случаях я хотел бы, чтобы это делалось A или B, но в большинстве случаев это довольно аккуратно.Для вашего случая,
tig <filename>
может быть, то, что вы ищете.http://jonas.nitro.dk/tig/
источник
Вы можете использовать vscode с GitLens , это очень мощный инструмент. После установки GitLens, перейдите на вкладку GitLens, выберите
FILE HISTORY
и вы можете просмотреть его.источник
Я написал Git-воспроизведения для этой конкретной цели
Это дает преимущество как в отображении результатов в командной строке (например
git log -p
), так и в том случае, когда вы можете проходить каждый коммит с помощью клавиш со стрелками (напримерgitk
).источник
Или:
gitx -- <path/to/filename>
если вы используете GITX
источник
Вы также можете попробовать это, в котором перечислены коммиты, которые изменили определенную часть файла (реализовано в Git 1.8.4).
Возвращенным результатом будет список коммитов, которые изменили эту конкретную часть. Команда:
где upperLimit - это start_line_number, а lowerLimit - это конечный_лайн-номер файла.
Более подробная информация на https://www.techpurohit.com/list-some-useful-git-commands
источник
Если вы хотите просмотреть всю историю файла, в том числе и во всех других ветках, используйте:
источник
С отличными Git Extensions вы переходите к точке в истории, где файл еще существовал (если он был удален, в противном случае просто перейдите в HEAD), переключитесь на
File tree
вкладку, щелкните правой кнопкой мыши на файле и выберитеFile history
.По умолчанию он следует за файлом через переименования, а
Blame
вкладка позволяет увидеть имя в данной ревизии.У него есть несколько мелких ошибок, например, показ
fatal: Not a valid object name
наView
вкладке при нажатии на ревизию удаления, но я могу с этим смириться. :-)источник
Если вы используете графический интерфейс пользователя git (в Windows) в меню «Репозиторий», вы можете использовать «Визуализация истории мастера». Выделите коммит в верхней панели и файл в правом нижнем углу, и вы увидите diff для этого коммита в левом нижнем углу.
источник
SmartGit :
источник
Ответ, который я искал, которого не было в этой теме, - увидеть изменения в файлах, которые я подготовил для фиксации. т.е.
источник
git diff origin/master
чтобы показать полные различия между вашей локальной веткой и главной веткой (которую можно обновлять с удаленного компьютераgit fetch
)Если вы используете TortoiseGit, вы сможете щелкнуть правой кнопкой мыши по файлу и сделать
TortoiseGit --> Show Log
. В появившемся окне убедитесь, что:Show Whole Project
Опция ' ' не отмечена.All Branches
Опция ' ' отмечена.источник
git diff -U <filename>
дать вам унифицированный дифференциал.Он должен быть окрашен в красный и зеленый. Если это не так, запустите:
git config color.ui auto
сначала.источник
Если вы используете eclipse с плагином git, он имеет превосходное представление сравнения с историей. Щелкните правой кнопкой мыши файл и выберите «сравнить с» => «история»
источник
Я, вероятно, о том, где был OP, когда это началось, в поисках чего-то простого, что позволило бы мне использовать git difftool с vimdiff для просмотра изменений в файлах в моем репо, начиная с определенного коммита. Я не был слишком доволен ответами, которые нашел, поэтому я собрал этот скрипт git inc remental rep orter (gitincrep), и он мне пригодился:
Вызывается без аргументов, это начнется с начала истории репо, в противном случае оно начнется с любого сокращенного хэша коммита, который вы предоставите, и перейдет к настоящему моменту - вы можете в любое время выйти из ctrl-C. Любые аргументы после первого будут ограничивать отчеты о различиях только теми файлами, которые перечислены среди этих аргументов (что, как мне кажется, и было желательным для ОП, и я бы порекомендовал для всех проектов, кроме небольших). Если вы проверяете изменения в определенных файлах и хотите начать с самого начала, вам нужно предоставить пустую строку для arg1. Если вы не являетесь пользователем vim, вы можете заменить vimdiff своим любимым инструментом diff.
Поведение состоит в том, чтобы выводить комментарии коммитов при обнаружении соответствующих изменений и начинать предлагать запуск vimdiff для каждого измененного файла (это поведение git difftool , но оно работает здесь).
Этот подход, вероятно, довольно наивный, но, просматривая множество решений здесь и в соответствующей статье, многие из них включали установку новых инструментов в систему, к которой у меня нет доступа администратора, с интерфейсами, которые имели собственную кривую обучения. Вышеупомянутый скрипт сделал то, что я хотел, не имея дело с этим. Я рассмотрю множество отличных предложений, когда мне нужно что-то более сложное, но я думаю, что это напрямую зависит от ОП.
источник
Я нашел очень простое решение, чтобы быстро найти историю файла.
Было бы показать историю всех коммитов.
источник