git різняться між клонованим та оригінальним віддаленим сховищем


170

Я клонував сховище github і не змінив місцевих змін. Репозиторій Github перемістився вперед з комісіями на одній гілці.

  1. Як знайти різницю між моїм місцевим сховищем та оригінальним сховищем github?
  2. Як знайти різницю між робочою копією та оригінальним сховищем github?
  3. Як знайти різницю між моїм місцевим сховищем та іншим сховищем github того ж проекту?


1
@CiroSantilli 新疆 改造 中心 六四 事件 法轮功: Я думаю, що це досить різне: інше питання стосується будь-якої загальної віддаленої гілки, тоді як це стосовно посилання на GitHub, а також запитує про три різні вихідні точки. Вони напевно схожі, тому ваше посилання, безумовно, корисне.
jvriesem

Відповіді:


161

1) Додайте будь-які віддалені сховища, які ви хочете порівняти:

git remote add foobar git://github.com/user/foobar.git

2) Оновіть локальну копію пульта:

git fetch foobar

Вилучення не змінить вашу робочу копію.

3) Порівняйте будь-яку гілку вашого локального сховища з будь-яким віддаленим вами доданим:

git diff master foobar/master

Чи мені знадобиться git fetch перед diff? Я здогадуюсь, без цього не можна відрізнятись.
Олег Прудников

Це насправді відповідь лише на питання 3 (відмінне від іншого github repo).
Руслан Кабалін

5
Ніщо не відрізняє "оригінальне сховище github" від будь-якого іншого віддаленого сховища. Або я щось нерозумію?
dbyrne

Коли я спробував це з git 2.7.4, "git diff master foobar / master" не виявив відмінностей. Мені здається, він порівнює мою локальну копію ("майстер") з репо, поданим у якості 1-го аргументу ("майстер"), і там розрізняється лише "шлях / файл" "фобар / майстер". Але команда "diff foobar / master" працювала на мене, порівнюючи мого місцевого господаря з foobar / master.
користувач2081279

Замість fetch(номер 2) як альтернативи: git remote update- оновиться всі ваші гілки, встановлені для відстеження віддалених, але не об'єднають жодних змін у; абоgit pull
Тімо

49

Ще одна відповідь на ваші запитання (якщо припустити, що ви перебуваєте на майстрах і вже зробили "git fetch origin", щоб ви дізналися про віддалені зміни):

1) Здійснює віддалену гілку з моменту створення локальної філії:

git diff HEAD...origin/master

2) Я припускаю, що "робочою копією" ви маєте на увазі свою місцеву філію з деякими місцевими комісіями, які ще не є віддаленими. Щоб побачити відмінності того, що у вас є у вашій місцевій філії, але цього не існує на віддаленій гілці, виконайте такі дії:

git diff origin/master...HEAD

3) Дивіться відповідь dbyrne.


Дякую за HEAD..origin/masterсинтаксис! Ми отримували помилки з початком / HEAD, що не існує, і це вирішило.
Dan Bechard

@ruslan: що це означає, коли git diff HEAD...origin/masterнічого не повертає, якщо я клонував віддалений каталог, на який я маю право вносити зміни?
Mona Jalal

Помилка трапилася, коли я клонував за допомогою GUI Windows, тому мені цікаво, чи клоун пройшов повністю. Я бачу, що папки тут в моєму каталозі, але я хочу переконатися, що вони такі ж, як віддалені. Однак у git shell, git diff нічого не повертає. Я розгублений, чи вдався мій клон чи ні?
Mona Jalal

@MonaJalal, це означає, що змін, які ви перебуваєте в потоці, не було, оскільки ви його клонували.
Руслан Кабалін

21

Цей приклад може допомогти комусь:

Примітка " origin" - це мій псевдонім для віддаленого "Що є на Github"
Примітка " mybranch" - це мій псевдонім для моєї гілки "що є місцевим", що я синхронізую з github -
назва вашої гілки "master", якщо ви не створили один. Однак я використовую інше ім'я, mybranchщоб показати, де використовується параметр імені гілки.


Які саме мої віддалені репости на github?

$ git remote -v
origin  https://github.com/flipmcf/Playground.git (fetch)
origin  https://github.com/flipmcf/Playground.git (push)

Додайте "інше сховище github того ж коду" - ми називаємо це виделкою:

$ git remote add someOtherRepo https://github.com/otherUser/Playground.git

$git remote -v
origin  https://github.com/flipmcf/Playground.git (fetch)
origin  https://github.com/flipmcf/Playground.git (push)
someOtherRepo https://github.com/otherUser/Playground.git (push)
someOtherRepo https://github.com/otherUser/Playground.git (fetch)

переконайтесь, що наше місцеве репо є актуальним:

$ git fetch

Змініть деякі речі локально. скажімо файл ./foo/bar.py

$ git status
# On branch mybranch
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   foo/bar.py

Перегляньте мої незатверджені зміни

$ git diff mybranch
diff --git a/playground/foo/bar.py b/playground/foo/bar.py
index b4fb1be..516323b 100655
--- a/playground/foo/bar.py
+++ b/playground/foo/bar.py
@@ -1,27 +1,29 @@
- This line is wrong
+ This line is fixed now - yea!
+ And I added this line too.

Здійснюйте місцеві дії.

$ git commit foo/bar.py -m"I changed stuff"
[myfork 9f31ff7] I changed stuff
1 files changed, 2 insertions(+), 1 deletions(-)

Тепер я інший, ніж мій віддалений (на github)

$ git status
# On branch mybranch
# Your branch is ahead of 'origin/mybranch' by 1 commit.
#
nothing to commit (working directory clean)

Відрізнити це за допомогою дистанційного - вилка: (це часто робиться за допомогою git diff master origin)

$ git diff mybranch origin
diff --git a/playground/foo/bar.py b/playground/foo/bar.py
index 516323b..b4fb1be 100655
--- a/playground/foo/bar.py
+++ b/playground/foo/bar.py
@@ -1,27 +1,29 @@
- This line is wrong
+ This line is fixed now - yea!
+ And I added this line too.

(git push, щоб застосувати їх до віддаленого)

Як моя віддалена гілка відрізняється від віддаленої ведучої гілки?

$ git diff origin/mybranch origin/master

Як мій локальний матеріал відрізняється від віддаленої гілки майстра?

$ git diff origin/master

Чим мої речі відрізняються від чужої вилки, головного відділення того ж репо?

$git diff mybranch someOtherRepo/master

5
Перш ніж ми будемо робити "git diff", я думаю, що необхідно зробити "git fetch", щоб переконатися в актуальності нашої локальної копії пульта.
Дон

1
Я прочитав, можливо, 20 публікацій про те, як порівнювати віддалений та локальний, я щойно зрозумів це: git fetch ВИМОГА спочатку. git - це справді збірний код RCS. Ісус. Дякую за підтвердження, Дон!
Теренс Парр

щойно доданий git fetchдо цієї відповіді.
FlipMcF

1
Хммм ... мені не подобається, як я використовував "myfork" як своє ім'я гілки. Це може когось збентежити (як я, який щойно повернувся за цією відповіддю)
FlipMcF

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