Как проверить изменения в удаленном (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.



@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

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


13

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

git whatchanged origin/master -n 1

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

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.