Як перевірити зміни на віддаленому сховищі 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 питання задає спосіб перевірити зміни, перш ніж надсилати комісії до місцевого відділення. тож так, вам доведеться оновити свою локальну філію після перевірки змін.
Раджані Карутурі

Це для віддаленого походження або вище за течією?
vikramvi

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" - це локальна операція, і вона не переходить через мережу для отримання інформації.
Лернкурве

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
Чому вам потрібно зробити тимчасову гілку для відмінностей між редакціями віддаленого? можна простоgit diff origing/master^ origing/master^^
Пабло Марін-Гарсія

@ PabloMarin-Garcia: Дякую Я тоді цього не знав.
Лернкурве

2

git statusне завжди показує різницю між господарем та походженням / майстром навіть після вибору. Якщо ви хочете, щоб комбінація 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.