Как проверить изменения в удаленном (origin) Git-репозитории?

249

Вопрос

Какие команды Git выполняют следующий рабочий процесс?

сценарий

Я клонировал из репозитория и сделал несколько своих коммитов в свой локальный репозиторий. Тем временем мои коллеги сделали коммиты в удаленный репозиторий. Теперь я хочу:

  1. Проверьте , есть ли какие - либо новые коммиты от других людей на удаленном хранилище, то есть origin?

  2. Скажем, со времени моего последнего обращения в удаленном репозитории было 3 новых коммита, я хотел бы проверить коммиты удаленного репозитория, то есть HEAD~3с HEAD~2, HEAD~2с HEAD~1и HEAD~1с HEAD.

  3. Узнав, что изменилось удаленно, я хочу получить последние коммиты от других.

Мои выводы пока

На шаге 2: Я знаю каретку обозначения HEAD^, и HEAD^^т.д. , и тильды обозначения HEAD~2, и HEAD~3т.д.

Для шага 3: то есть, я думаю, просто git pull.

Lernkurve
источник
3
Возможный дубликат проверки, если тянуть нужно в Git
Даниэле Орландо
@Daniele, ответ на который вы ссылаетесь, превосходен и даже поставляется с настраиваемым скриптом bash. +1
gorbysbm

Ответы:

255

Вы можете git fetch originобновить удаленную ветку в вашем репозитории, чтобы она указала на последнюю версию. Для сравнения с пультом:

git diff origin/master

Да, вы также можете использовать обозначение каретки.

Если вы хотите принять удаленные изменения:

git merge origin/master
Алан Хаггай Алави
источник
34
Дифф выглядит наоборот. Я считаю, что проще в использовании, git diff HEAD origin/masterпоэтому в diff показано, что будет применено, если я приму удаленные изменения.
cbliard
2
"git fetch origin" и "git show-branch * master" были полезны для меня.
Леа Массиот
159
git remote update && git status 

Нашел на ответ на Убедитесь, что тянуть нужно в Git

git remote updateчтобы обновить ваши удаленные ссылки. Затем вы можете сделать одну из нескольких вещей, таких как:

  1. git status -unoсообщит, находится ли отслеживаемая вами ветка впереди, позади или разошлась. Если это ничего не говорит, локальный и удаленный - то же самое.

  2. git show-branch *master покажет вам коммиты во всех ветках, имена которых заканчиваются на master (например, master и origin / master).

Если вы используете -vс git remote updateвами можно увидеть , какие филиалы получили обновления, так что вы на самом деле не нужны никакие дополнительные команды.

Раджани Карутури
источник
Недостаточно. Я должен сделать git pull <remote> <branch>потом, как только мне нужно нажать, потому что конец моей локальной ветви был позади удаленного коллеги.
Overdrivr
3
@Overdrivr вопрос требует способа проверить изменения, прежде чем получать коммиты в локальную ветку. так что, да, вы должны обновить свою локальную ветку после проверки изменений.
Раджани Карутури
Это для удаленного существа происхождения или вверх по течению?
Викрамви
1
Эта опция -v не работает. Ибо git remote update -vя получилerror: unknown switch `v'
Шад
1
@Shad вы должны делать git remote -v updateнеgit remote update -v
Раджани Karuturi
34

Хороший способ получить синтетическое представление о том, что происходит «происхождение»:

git remote show origin
выщерблять
источник
11
Но эта команда не показывает мне, сколько коммитов было на «источнике» со времени моего последнего запроса, не так ли? Как я понял, «git remote show origin» - это локальная операция, которая не идет по сети для получения информации.
Lernkurve
24

Я просто использую

git remote update
git status

Затем последний сообщает, сколько коммитов за моим локальным. (если есть)

затем

git pull origin master

чтобы привести мой местный в курсе :)

Пол 501
источник
13

Мой обычный вопрос скорее «что-то новое или измененное в репо», так что то, что изменилось, пригодится. Нашел это здесь .

git whatchanged origin/master -n 1
iceCode
источник
1
никогда не было этой команды Спасибо. это то, что я искал
Saurabh Jain
11

Одно из возможных решений

Благодаря решению Алана Хаггая Алави я получил следующий потенциальный рабочий процесс:

Шаг 1:

git fetch origin

Шаг 2:

git checkout -b localTempOfOriginMaster origin/master
git difftool HEAD~3 HEAD~2
git difftool HEAD~2 HEAD~1
git difftool HEAD~1 HEAD~0

Шаг 3:

git checkout master
git branch -D localTempOfOriginMaster
git merge origin/master
Lernkurve
источник
13
Зачем вам нужно делать временную ветку для diff между ревизиями пульта? Вы можете простоgit diff origing/master^ origing/master^^
Пабло Марин-Гарсия
@ ПаблоМарин-Гарсия: Спасибо. Я не знал этого тогда.
Lernkurve
2

git statusне всегда показывает разницу между master и origin / master даже после выборки. Если вы хотите, чтобы комбинация git fetch origin && git statusработала, вам нужно указать информацию отслеживания между локальной веткой и источником:

# git branch --set-upstream-to=origin/<branch> <branch>

Для основной ветки:

git branch --set-upstream-to=origin/master master
шакал
источник
0

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

я просто использую

git fetch origin

чтобы извлечь удаленные изменения, а затем я просматриваю как локальные, так и ожидающие удаленные коммиты (и связанные с ними изменения) с помощью симпатичного инструмента gitk ( https://git-scm.com/docs/gitk ) с использованием аргумента --all, например:

gitk --all
Рафаэль
источник