Я огляделся и не уверен, возможно ли это, но вот что:
У меня есть файл (javascript) (скажем, /lib/client.js), в котором у меня есть уникальный идентификатор, присвоенный переменной, например:
var identifier = "SOME_IDENTIFIER";
Вы можете думать об идентификаторе как о номере версии: периодически мы меняем эту переменную на новый идентификатор.
Я бы хотел найти все уникальные идентификаторы, которые мы когда-либо использовали. Как я могу это сделать с помощью git?
Я предполагаю, что есть способ выполнить поиск в истории git и распечатать соответствие строки "var identifier ="
. Я мог бы распаковать этот список вручную.
В любом случае, я был бы признателен за любое понимание здесь. Спасибо.
Ответы:
Начиная с git 1.8.4 , есть более прямой способ ответить на ваш вопрос.
Предполагая, что эта строка
110
является строкой, говорящейvar identifier = "SOME_IDENTIFIER";
, сделайте следующее:Это вернет каждую фиксацию, которая коснулась этой строки кода.
[ Документация Git (см. Параметр командной строки "-L")]
источник
См. Справочную страницу для
git-log
иgitdiffcore
. Я считаю, что эта команда сделает это, но это может быть не совсем правильно:РЕДАКТИРОВАТЬ: вот примерное начало сценария bash, чтобы показать фактические строки. Возможно, это именно то, что вы ищете.
Он используется
git log -G
для поиска интересных коммитов, используя--format=%H
для создания списка хэшей коммитов. Затем он выполняет итерацию по каждой интересной фиксации, просяgit grep
показать строки из этой фиксации и файла, содержащие регулярное выражение, с префиксом хэша фиксации.РЕДАКТИРОВАТЬ: изменено на использование
-G
вместо-S
предложенного в комментариях.источник
sfile=path/to/some_file; sfind='string_to_find'; for c in $(git log -G $sfind --format=%H -- $sfile); do git --no-pager grep -e $sfind -n $c -- $sfile; echo; done
Вы также можете сделать это с помощью gitk:
В раскрывающемся списке «фиксация» выберите «добавление / удаление строки:» и в текстовом поле рядом с ней введите «var identifier =», и все фиксации, которые добавляют или удаляют строки, содержащие эту строку, будут выделены.
источник
git blame file.js
илиgit gui blame file.js
?git gui blame file.js
сделает это ... он покажет вам все версии файла и кто их изменил; вы можете просто пролистать историю назад.Если вы немного адаптируете ответ @ rob,
git log
он в основном сделает это за вас, если все, что вам нужно, это визуальное сравнение:-U0
означает вывод в режиме исправления (-p
) и показывать нулевые строки контекста вокруг исправления.Вы даже можете сделать это в разных ветках:
Может быть способ подавить заголовок diff, но я его не знаю.
источник
В Magit вы можете сделать это с помощью
Затем он попросит вас указать файл и начальную, конечную строки.
источник