Перед отправкой в удаленный репозиторий git, есть ли способ получить список всех файлов, которые будут отправлены (без анализа вызова git status)?

#git

#git

Вопрос:

Я пытаюсь избежать необходимости анализировать вывод «git status». Есть ли команда, которая вернет список всех зафиксированных файлов, которые будут отправлены при следующей команде «git push»?

Комментарии:

1. Обратите внимание, что git push на самом деле файлы не передаются. Он отправляет коммиты . Вы либо отправляете весь коммит (который содержит все файлы), либо не отправляете его вообще. Нужно обратить внимание на то, что отличается в коммит (ах), которые вы будете отправлять, а не на то, какие файлы в них находятся, потому что в них все файлы.

Ответ №1:

Вы должны попробовать git diff --stat --cached origin/<<branch name>>

Пример : git diff --stat --cached origin/master

--stat Генерируется diffstat. Для --cached просмотра изменений, которые вы внесли.

Дайте мне знать, если это сработает.

Комментарии:

1. Потрясающе. Обязательно отметьте его как правильный ответ.

Ответ №2:

Короткий ответ

 git log --pretty=format:"" --name-only @{upstream}.. | sort -u
  

Объяснение

--pretty=format:"" для подавления информации о фиксации

--name-only запрашивает список файлов

@{upstream} это конструкция для описания удаленной ветви, с которой связан текущий. Это не заполнитель, он должен быть записан как есть.

@{upstream}.. (обратите .. внимание, что это диапазон) означает все в текущей ветке, но неизвестно удаленной ветке.

Конечно, более полезно отсортировать его, если у вас много коммитов, изменяющих одни и те же файлы. Используйте | sort -u для этой цели.


Последнее замечание: сделайте это псевдонимом!

 # pf = Push Files (could be whatever else you prefer)
git config --global alias.pf '!git log --pretty=format:"" --name-only @{upstream}.. | sort -u'

# then just
git pf
  

Комментарии:

1. это не даст мне список файлов без необходимости анализа выходных данных…

2. Вы абсолютно правы, когда я перечитываю ваш вопрос, я понимаю, что я был не в теме с моим git push --dry-run . Отредактировано.