Как получить список файлов, которые должны быть обновлены с помощью `git pull`, не зная названия ветви или что она отслеживает? - PullRequest
15 голосов
/ 15 декабря 2011

Как получить список файлов, которые будут обновлены (или были только что обновлены) на git pull, чтобы я мог их проанализировать и выполнить соответствующие действия в сценарии?

Принятый ответ на этот похожий вопрос показал мне, что я могу получить список коммитов с

git fetch && git log master..origin/master

но это мне не подходит, потому что мне нужен список файлов, и мой скрипт не может предположить, что ветвь master или текущая ветвь отслеживает origin/master.

Путем небольшого эксперимента (и комментария @ Джонатана) я обнаружил, что

git fetch && git diff master origin/master --name-only

уже близко, но теперь мне нужно найти способ получить текущую ветку и то, что она отслеживает, чтобы я мог выполнить что-то вроде этого (python):

"git fetch && git diff %s %s --stat" % (this_branch, tracked_branch)

Мне кажется, что я в основном там, так как теперь мне действительно нужно знать, как получить текущую ветку и что она отслеживает, но я дал более широкий контекст в надежде, что кто-то знает много более простой способ решения этой проблемы (git incoming --files было бы неплохо;)

Ответы [ 2 ]

13 голосов
/ 15 декабря 2011

Предполагая, что вы знаете имя пульта (в моих примерах, origin), вы можете просто перейти:

git fetch && git diff --name-only ..origin

templates/shows/showBase.html
templates/shows/showList.html
templates/shows/showListEntry.htm

Или, если вы хотите отсортировать отдельные коммиты, вы можете использовать whatchanged:

git fetch && git whatchanged --name-only ..origin

commit fcb1b56d564fe85615ecd6befcd82f6fda5699ae
Author: Grambo <email@email>
Date:   Mon Dec 12 23:36:38 2011 +0000

    Hooked "I've Seen This" button up to "Review Show" dialog

templates/shows/showBase.html
templates/shows/showList.html
templates/shows/showListEntry.htm

commit xasdasdsada......
2 голосов
/ 01 сентября 2018

Более общее решение, чем ответ @ obmarg, таково:

git fetch && git diff --name-only @ @{u}

Здесь @ - это сокращение для HEAD, которое, в свою очередь, является указателем на вашу текущую извлеченную ветку.@{u} или @{upstream} обозначает ветвь отслеживания для HEAD.Таким образом, никаких жестко запрограммированных предположений о текущей ветви (master), имени удаленного (origin) или имени отслеживающей ветви (origin/master) не требуется.

Если вы хотите сделатьэто с другой веткой, используйте это:

git fetch && git diff --name-only master master@{u}

Синтаксис для @{u} объяснен в git help revisions, поиск для upstream.

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