Как просмотреть git-pull без выполнения fetch? - PullRequest
188 голосов
/ 08 октября 2008

Возможно ли это вообще?

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

git pull

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

Ответы [ 7 ]

209 голосов
/ 08 октября 2008

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

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

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

42 голосов
/ 08 октября 2008

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

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

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

Man Page

Редактировать: дальнейшие объяснения

Прямо с ускоренного курса Git-SVN ссылка

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

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

На данный момент они находятся в вашем хранилище, и вы можете проверить их, используя:

git log origin 

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

git merge origin

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

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

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

git log -p //log with diff

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

18 голосов
/ 21 марта 2011

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

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

git checkout master                                                  
git fetch                                        
git diff origin/master
git pull --rebase origin master
7 голосов
/ 18 августа 2011

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

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

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

$git fetch
$git changes origin

Это даст вам хороший и простой способ предварительного просмотра изменений перед выполнением merge.

2 голосов
/ 14 февраля 2018

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

Это относится к файлу ~/.gitconfig:

[alias]
        diffpull=!git fetch && git diff HEAD..@{u}

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

1 голос
/ 15 февраля 2018

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

  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 с выхода.

0 голосов
/ 19 июня 2017

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

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