Как просмотреть 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
Я использую эти две команды и вижу файлы для изменения.
-
Сначала выполняя git fetch, он выдает следующий результат (часть вывода):
...
72f8433..c8af041 develop -> origin/develop
...
Эта операция дает нам два идентификатора фиксации: первый - старый, а второй - новый.
-
Затем сравните эти два коммита, используя 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 вход в систему как для реальной проверки, так и для нового клона, чтобы узнать, есть ли у вас то же самое.