Как просмотреть git -pull, не делая выборку?

Возможно ли это?

В принципе, есть удаленный репозиторий, из которого я вытягиваю, используя только:

git pull

Теперь я хотел бы просмотреть, что изменит этот pull (diff), не касаясь ничего на моей стороне. Причина в том, что вещь, которую я вытягиваю, может быть не "хорошей", и я хочу, чтобы кто-то другой исправил ее, прежде чем сделать мой репозиторий "грязным".

Ответ 1

После выполнения git fetch выполните git log HEAD..origin, чтобы отобразить записи журнала между вашей последней общей фиксацией и ветвью происхождения. Чтобы показать различия, используйте либо git log -p HEAD..origin, чтобы показать каждый патч, либо git diff HEAD...origin (три точки не два), чтобы показать один diff.

Как правило, нет необходимости отменять выборку, потому что выполнение выборки только обновляет удаленное отделение и ни одну из ваших ветвей. Если вы не готовы делать перетаскивание и слияние во всех удаленных коммитах, вы можете использовать git cherry-pick для принятия только определенных удаленных коммитов, которые вы хотите. Позже, когда вы будете готовы получить все, тяга git будет сливаться с остальными коммитами.

Обновление: я не совсем уверен, почему вы хотите избежать использования git fetch. Все git fetch выполняет обновление локальной копии удаленной ветки. Эта локальная копия не имеет никакого отношения ни к одному из ваших веток, и она не имеет ничего общего с незафиксированными локальными изменениями. Я слышал о людях, которые запускают git fetch в задании cron, потому что это настолько безопасно.

Ответ 2

Я думаю, что git fetch - это то, что вы ищете.

Он вытащит изменения и объекты, не привязывая их к вашему локальному индексу репо.

Их можно объединить позже с git merge.

Страница человека

Изменить: дальнейшее объяснение

Прямо из Git - курса по сбою SVN ссылка

Теперь, как вы получаете какие-либо новые изменения из удаленного репозитория? Вы их получите:

git fetch http://host.xz/path/to/repo.git/ 

В этот момент они находятся в вашем репозитории, и вы можете их изучить, используя:

git log origin 

Вы также можете различать изменения. Вы также можете использовать git журнал HEAD..origin, чтобы увидеть только те изменения, которые у вас нет в филиале. Затем, если хотите объединить их - просто выполните:

git merge origin

Обратите внимание, что если вы не укажете ветвь для извлечения, по умолчанию она будет удалена по умолчанию.

Чтение man-страницы честно собирается дать вам лучшее представление о вариантах и ​​о том, как использовать его.

Я просто пытаюсь сделать это с помощью примеров и памяти, в настоящее время у меня нет коробки для тестирования. Вы должны посмотреть:

git log -p //log with diff

Извлечение может быть отменено с помощью git reset --hard (ссылка), однако все незавершенные изменения в вашем дереве будут потеряны, а также изменения, которые вы извлекли.

Ответ 3

Вы можете извлечь из удаленного репо, увидеть различия, а затем вытащить или объединить.

Это пример удаленного репо под названием origin и ветвь с именем master, отслеживающая удаленную ветвь origin/master:

git checkout master                                                  
git fetch                                        
git diff origin/master
git pull --rebase origin master

Ответ 4

Я создал пользовательский псевдоним git, чтобы сделать это для меня:

alias.changes=!git log --name-status HEAD..

с этим вы можете сделать это:

$git fetch
$git changes origin

Это позволит вам легко и просто просмотреть предварительные изменения перед тем, как сделать merge.

Ответ 5

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

Это идет в файле ~/.gitconfig:

[alias]
        diffpull=!git fetch && git diff [email protected]{u}

Он выбирает текущую ветвь, затем выполняет различие между рабочей копией и этой извлеченной ветвью. Так что вы должны видеть только изменения, которые придут с git pull.

Ответ 6

Я использую эти две команды и вижу файлы для изменения.

  1. Сначала выполняя git fetch, он выдает следующий результат (часть вывода):

    ...
    72f8433..c8af041  develop -> origin/develop
    ...

Эта операция дает нам два идентификатора фиксации: первый - старый, а второй - новый.

  1. Затем сравните эти два коммита, используя git diff

    git diff 72f8433..c8af041 | grep "diff --git"

Эта команда выведет список файлов, которые будут обновлены:

diff --git a/app/controller/xxxx.php b/app/controller/xxxx.php
diff --git a/app/view/yyyy.php b/app/view/yyyy.php

Например, app/controller/xxxx.php и app/view/yyyy.php будут обновлены.

Сравнение двух коммитов с использованием git diff печатает все обновленные файлы с измененными строками, но с помощью grep он ищет и получает только строки, содержащие diff --git из вывода.

Ответ 7

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