В Git, как узнать, какие файлы были добавлены после определенного тега?

Я поддерживаю файлы сценариев SQL миграции базы данных.

я помечаю свои коммиты тегом git.

Предположим, у меня есть теги, такие как 1, 1.1, 1.2, 1.3

Я только хочу изменить файл (db migration sql script), когда тег не был добавлен в репо после создания этого файла. Как я могу это узнать?

Если файл был создан, а затем был добавлен тег (версия), то я не хочу изменять этот сценарий миграции sql, вместо этого я добавлю полностью новый файл sql, который помогает мне делать то, что я хочу.

2 ответов


вы можете использовать git diff с некоторым grepping следующим образом:

git diff --name-status your-tag..HEAD | grep ^A

это значит:

"дайте мне различия между your-tag и HEAD, показывая имя файла и его статус (добавлено, изменено, удалено, создано). "

grep затем фильтрует его в файлы, которые были добавлены, которые --name-status указывает, начиная строку с верхнего регистра "A".


чтобы автоматически найти последний тег, вы можете использовать следующую команду:

git describe $(git rev-list --tags --max-count=1)

затем diff команда даст вам список добавленных файлов между двумя фиксациями:

git diff --diff-filter=A --name-only $start_commit_id $end_commit_id

Дополнительные параметры могут быть добавлены в фильтр diff, например --diff-filter=AR будет список файлов ,которые были [A]dded plus [R]enamed. Теперь, если вы поместите обе команды вместе, вы получите список файлов с последнего тега, независимо от того, какая последняя метка тега есть:

git diff --diff-filter=A --name-only $(git describe
     $(git rev-list --tags --max-count=1)) HEAD