Як перевірити зміни на віддаленому сховищі 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.