Найти идентификатор последнего коммита файла в удаленной ветке - PullRequest
1 голос
/ 10 июня 2019

Я внес изменения в конкретный файл и сделал коммит, точнее несколько коммитов, но ни один из них не был выдвинут.Мне нужно найти идентификатор коммита, который был последним коммитом для этого файла в удаленной ветке.

Поэтому я попытался найти последний коммит репо в удаленной ветке, но этот коммит конкретного файла, которыйОжидается, было намного раньше, чем последний коммит, показанный в журнале git.

git log

git rev-parse --short <branch>

Итак, обратите внимание, что есть два файла с именем A.txt, B.txt

A.txt был изменен 1 января 2009 года и получил подтверждение, ID: abc123 (скажем)

B.txt был изменен 12 января 2009 года и получил фиксацию, ID: abd456 (скажем)

Оба были выдвинуты, поэтому последний идентификатор фиксации репо в ветви - abc456

Учтите, сегодня я внес изменения в A.txt и сделал несколько коммитов, ID: def123, def456, def789 Но я не передавал его в удаленные ветви.

Я пытаюсь отфильтроватьиз строк, измененных в A.txt после идентификатора коммита, abc123, поэтому как этого добиться,

Я могу получить ожидаемые строки журнала, модифицированные с помощью

git blame "$filename" | sort -b -k 3 | grep -i "$lastcommit" -B 100 | grep -v "$lastcommmit"

Но как получитьlastcommit (в удаленной ветке) конкретного файла.Используя последний коммит репо в удаленной ветке, я не смог получить ожидаемых результатов (очевидно, в этом нет соответствующего идентификатора коммита)

1 Ответ

1 голос
/ 10 июня 2019

Эта команда должна работать:

lastcommit=`git log --format=%h -1 <branch> -- $filename`

Пояснение:

Если задан аргумент имени файла, git log будет выводить только те коммиты, которые касаются этого файла.

Формат %h говорит просто показать идентификатор фиксации, больше ничего. %h сокращено (в зависимости от ваших настроек), вы также можете использовать %H для полного идентификатора фиксации, если хотите.

Опция -1 говорит только показывать один коммит, который вам нужен. Предупреждение: если такой фиксации не существует, $lastcommit будет пустым. Если вы используете его в сценарии, проверьте это условие.

Я добавил -- перед именем файла на всякий случай: обычно он не нужен, но он проверяет, есть ли потенциальная неоднозначность, Git интерпретирует $filename как имя файла и не пытается его интерпретировать как и все остальное. Это также позволит избежать генерации сообщения об ошибке о ревизии или о том, что файл не существует, когда файл не существует: вместо этого вы получите пустой $lastcommit, который, я думаю, легче проверить в скрипте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...