Git: Як перевірити, чи оновлений локальний репо?


85

Я хотів би знати, чи оновлено моє місцеве репо (і якщо ні, то в ідеалі я хотів би переглянути зміни).

Як я міг це перевірити, не роблячи git fetchчи git pull?

Відповіді:


94

Спробуйте git fetch --dry-run У посібнику ( git help fetch) сказано:

--dry-run
Show what would be done, without making any changes.

3
Дякую! Хоча з вихідних даних важко зрозуміти, які файли були додані / змінені / видалені.
Міша Морошко

1
Ви бачите, які теги оновлюються, і діапазон коміту start..end для різних гілок. Якщо цього недостатньо, зробіть це як належне завантаження (а не витягування), яке дасть вам належну, окрему локальну копію пульта дистанційного керування, не впливаючи на власну роботу філії. Потягнення спробує об'єднати два, що не те, що ви хочете. Передача даних однакова, незалежно від того, чи ви - висушити чи ні.
Філіп Оуклі,

4
чому при запуску git fetch --dry-runнічого не відображається?
Парамвір Сінгх Карвал,

3
@ParamvirSinghKarwal Git скупий у своїх повідомленнях. Якщо нема чого сказати, це нічого не говорить, ніби нічого не сталося. Можливо, ви в курсі чергової характеристики перегляду. Може додати --all?
Філіп Оклі

1
@AaronBeall Якщо це так, то, швидше за все, це означає, що ви вже отримали ці зміни локально (так що нема чого отримувати), але ще не об’єднали їх у свою гілку. git pullприблизно еквівалентно a git fetch && git merge. Якщо ви в будь-який момент запустили вибірку без --dry-run, то ви вже завантажили речі локально.
DuckPuppy

34
git remote show origin

Результат:

HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (local out of date) <-------

У ньому перелічено філії всіх часів. Якщо у вас є сховище з довгою історією, висновок досить захаращений.
Паулу Карвальо,

git віддалене шоу походження | grep "your / branch"
jim smith

26

Перше використання git remote updateдля оновлення віддалених реф. Тоді ви можете зробити одну з кількох речей, таких як:

  1. git status -unoскаже вам, чи гілка, яку ви відстежуєте, попереду, позаду чи розбіглася. Якщо в ньому нічого не сказано, локальний та віддалений - однакові. Приклад результату:

На гілці DEV

Ваша гілка відстає від 'origin / DEV' на 7 комітів і може бути перенаправлена ​​вперед.

(використовуйте "git pull", щоб оновити вашу локальну гілку)

  1. git show-branch *master покаже вам коміти у всіх гілках, імена яких закінчуються на "master" (наприклад, master та origin / master).

Якщо ви використовуєте -vз віддаленим оновленням git ( git remote -v update), ви можете побачити, які гілки оновились, тому вам насправді не потрібні подальші команди.


2
Чому це так далеко? git remote update ; git status -unoвирішив це. git fetch --dry-runне давав жодного результату навіть у тих випадках, коли локальний телефон знаходився позаду віддаленого.
Аарон Білл,

1
git remote -v updateце відповідь для мене.
Паулу Карвальо,

17

Ви можете використовувати, git status -unoщоб перевірити, чи актуальне ваше місцеве відділення з початковим.


18
Він надає лише локальний статус, не перевіряючи віддалену гілку.
Ishan Liyanage

4
Тільки дає місцевий, але git remote update ; git status -unoзробив фокус! Даний git fetch --dry-runне давав результату, коли я очікував (і git pullбуде тягнути речі).
Аарон Білл,

1
Ця відповідь неправильна і її слід видалити. По суті, це продовжує дуже поширений, але помилковий міф про те, як працює Git, той, який розсіюється лише тоді, коли / якщо хтось вирішить прочитати коментарі до нього.
Прометей

8

Не зовсім - але я не бачу, як git fetchце зашкодить, оскільки це не змінить жодне з ваших місцевих відділень.


Я з цим повністю згоден. Git pull може пошкодити, перезаписавши файли. Але git fetch витягує лише метадані, дозволяючи таким командам, як git status, повідомляти, чи оновлений ваш локальний репо без перезапису будь-яких файлів. Він може не відповісти на букву запитання, але відповідає духу питання, надаючи вам потрібний інструмент. Git fetch, тоді git status покаже вам, де знаходиться ваш локальний репо відносно віддаленого, без перезапису файлів.
merlit64

5

Інша альтернатива - переглянути стан віддаленої гілки, git show-branch remote/branchвикористовуючи її як порівняння, яке можна побачити, git show-branch *branchщоб побачити гілку у всіх пультах, а також у вашому сховищі! перегляньте цю відповідь, щоб дізнатися більше https://stackoverflow.com/a/3278427/2711378


5

Вам потрібно буде виконати дві команди:

  1. git fetch походження
  2. git статус

1
Це працює, але питання чітко говорить без "вибору". Є багато випадків, коли ви хочете знати, чим ваш локальний репо відрізняється від віддаленого репо, фактично не отримуючи та не об’єднуючи змін.
Педрам Баширі

1
@pedrambashiri Мені справді цікаво, як що? Наскільки мені відомо, одне принесення ніколи не може нічому зашкодити.
Прометей

@Prometheus, перш за все, я просто хотів зазначити, що коли в запитанні чітко зазначено `` без отримання '', ви просто не можете використовувати вибір у своїй відповіді, якщо немає іншого способу зробити це, або немає реальних обставин, щоб це зробити без цього, що потребує пояснити у відповіді. Але щоб відповісти на ваше запитання, завантаження оновлює вашу локальну копію віддаленого репо. Подивіться на схему в цьому дописі blog.osteele.com/2008/05/my-git-workflow
Pedram Bashiri

4

Ви повинні запустити, git fetchперш ніж зможете порівняти локальне сховище з файлами на віддаленому сервері.

Ця команда лише оновлює ваші гілки віддаленого відстеження і не вплине на ваше робоче дерево, доки ви не зателефонуєте git mergeабо git pull.

Щоб побачити різницю між вашою локальною гілкою та віддаленою гілкою відстеження після того, як ви отримали, ви можете використовувати git diff або git cherry, як пояснено тут.


2

Якщо ви використовуєте

git fetch --dry-run -v <link/to/remote/git/repo>

Ви отримаєте відгук про те, чи оновлений він. Отже, в основному вам просто потрібно додати варіант «детальний» до відповіді, наведеної раніше.


1

Це неможливо без використання git fetchабо git pull. Як ви можете дізнатись, чи є сховище «оновленим», не переходячи до віддаленого сховища, щоб побачити, що взагалі означає «оновлений»?


5
Будь ласка, підтвердьте це! Ви щойно відповіли, що ви думаєте! Вам слід бути обережнішими, оскільки новачки будуть з цим валитися!
Амануель Нега

4
@AmanuelNega: Це лише основна логіка. Якщо ви хочете дізнатись, чи перебуває ваш локальний репо у такому ж стані, як віддалений репо, вам потрібно знати стан віддаленого репо. Період. Якщо ви не знаєте стан віддаленого репозиторію, ви не можете знати, чи перебуває локальний репо в тому ж стані. Зауважте, що використовується найбільш прийнята та прийнята відповідь git pull, що OP чітко забороняє у своєму питанні.
Jörg W Mittag

2
Бути проінформованим! git status -unoце працює, і можна також використовувати, git show-branch *masterщоб побачити статус усіх головних гілок! Ти все ще кажеш, що це неможливо? Ви можете бачити стан будь-якої гілки, якщо у вас є доступ до пульта!
Амануель Нега

2
@AmanuelNega: git statusповідомляє лише про стан ваших місцевих посилань, але не повідомляє, чи актуальні ваші місцеві посилання з віддаленими посиланнями. Знову ж таки: просто логічно неможливо дізнатись, яким є стан віддаленого репо, не отримавши стан віддаленого репо. Період. Це лише основні закони простору-часу.
Jörg W Mittag

6
Це не "логічно" неможливо, оскільки очевидно, що можна подзвонити комусь у вашій серверній кімнаті і сказати: "який хеш вашого HEAD на майстер-гілці" вони можуть вам сказати, а потім ви можете перевірити локальний і побачити, що ви не У мене немає цього хешу. Тепер ви знаєте, що вони не синхронізовані.
Джеймс Робінсон,

1

спробував відформатувати мою відповідь, але не зміг. Будь ласка, команді stackoverflow, чому розміщення відповіді так важко.

нескінченний,

відповідь:
git fetch origin
git status (ви побачите результат типу "Ваша гілка відстає від" origin / master "на 9 комітів")
для оновлення до віддалених змін: git pull

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.