Как сравнить локальную ветку git с ее удаленной веткой? - PullRequest
895 голосов
/ 26 ноября 2009

Как я могу увидеть diff между локальной веткой и удаленной веткой?

Ответы [ 17 ]

1254 голосов
/ 26 ноября 2009
git diff <local branch> <remote>/<remote branch>

Например git diff master origin/master или git diff featureA origin/next

Конечно, чтобы сказали , сказали ветка удаленного слежения сначала вам нужно git fetch; и вам нужно, чтобы в удаленном хранилище была актуальная информация о ветвях.

442 голосов
/ 26 ноября 2009

Чтобы обновить ветки удаленного отслеживания, сначала нужно набрать git fetch, а затем:

git diff <masterbranch_path> <remotebranch_path>

Вы можете git branch -a перечислить все ветви (локальные и удаленные), а затем выбрать имя ветви из списка (просто удалите remotes/ из имени удаленной ветви.

Пример: git diff master origin/master (где «master» - это локальная основная ветвь, а «origin / master» - это удаленная, а именно, происхождение и основная ветвь.)

172 голосов
/ 12 апреля 2012

Первый тип

git branch -a

, чтобы получить список доступных филиалов. На выходе вы можете увидеть что-то вроде

* master
  remotes/main/master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/mt
  remotes/upstream/master
  remotes/upstream/mt

Тогда покажи разницу

git diff --stat --color remotes/main/master..origin/master
git diff remotes/main/master..origin/master
101 голосов
/ 16 июня 2016

Если вы находитесь на данной ветке и хотите сравнить ее с отслеживаемой веткой вверх по течению, используйте

git diff @{upstream}

Предоставлено этот ответ , документация git для с указанием редакций имеет:

<branchname>@{upstream}, например master@{upstream}, @{u}
Суффикс @{upstream} к фирменному наименованию (краткая форма <branchname>@{u}) относится к ветвь, на которой настроена ветка, указанная branchname верх (настроен с branch.<name>.remote и branch.<name>.merge). Отсутствующий branchname по умолчанию соответствует текущему.

43 голосов
/ 14 апреля 2011

Я гораздо лучше понимаю вывод:

git diff <remote-tracking branch> <local branch>

, которая показывает мне, что будет отброшено и что будет добавлено, если я нажму на локальную ветку. Конечно, это то же самое, только обратное, но для меня это более читабельно, и мне удобнее смотреть на то, что произойдет.

29 голосов
/ 10 октября 2013

Простой способ:

git fetch
git log -p HEAD..FETCH_HEAD

Сначала будут получены изменения с вашего удаленного по умолчанию (источника). Это будет создано автоматически при клонировании репо. Вы также можете указать: git fetch origin master.

Затем git log используется для сравнения текущей ветки с только что выбранной. (Параметр -p (сгенерировать патч) показывает различия .)

11 голосов
/ 19 февраля 2014

Пусть ваша рабочая ветвь находится в разработке и вы хотите различать локальную ветку разработки и удаленную ветку разработки, в этом случае синтаксис должен быть таким: git diff remotes/origin/development..development
или

git fetch origin git diff origin/development

11 голосов
/ 21 февраля 2017

Вот как я это делаю.

#To update your local.
git fetch --all

при этом все извлекается с пульта, поэтому, когда вы проверяете разницу, она сравнивает разницу с удаленной веткой.

#to list all branches
git branch -a

Приведенная выше команда отобразит все ветви.

#to go to the branch you want to check difference
git checkout <branch_name>
#to check on which branch you are in, use
git branch
    (or)
git status

Теперь вы можете проверить разницу следующим образом.

git diff origin/<branch_name>

это сравнит вашу локальную ветку с удаленной веткой

10 голосов
/ 06 января 2018

тл; др : git diff <local branch> <remote branch>

При использовании git на оболочке, мне нравится сначала ориентироваться, оглядываясь вокруг. Вот команда показать все ветки

$ git branch -a  # (or git branch --all) 
* my-branch
  master
  remotes/origin/some-branch
  remotes/origin/HEAD -> origin/master
  remotes/origin/my-branch
  remotes/origin/some-other-branch
  remotes/origin/master

Здесь у меня есть две локальные ветви (my-branch и master) и 4 удаленных (some-branch, some-other-branch, master и my-branch).

Кроме того, звездочка рядом с my-branch сигнализирует о том, что я в данный момент нахожусь в этой ветке (вы также узнали бы об этом, используя команду git status, которая выдаст: On branch my-branch.).

Примечание: удаленные ветви в оболочке git bash показаны красным, а локальные - зеленым.

Если вы просто хотите показать удаленные ветви :

$ git branch -r # (or git branch --remotes)
  origin/some-branch
  origin/HEAD -> origin/master
  origin/my-branch
  origin/some-other-branch
  origin/master

Чтобы показать только локальные ветви, у вас может возникнуть желание использовать git branch -l, но это совершенно другая команда. Для показать локальные ветви использовать git branch без параметров

$ git branch
* my-branch 
  master

Чтобы завершить обзор основных параметров ветки, есть --list, который вопреки тому, что вы можете ожидать, разрешит фильтрацию . Используйте его с таким рисунком:

$ git branch --list 'my*'
* my-branch

Вы также можете комбинировать --list с опциями -a и -r, но не забудьте соответствующим образом адаптировать свой шаблон ( помните: удаленные ветви начинаются с "remotes" ). Пример: * * тысяча пятьдесят-три

# this will show all branches (local & remote) that start with my
$ git branch --list 'my*' -a
* my-branch

# better: the pattern includes the remote
$ git branch --list '*my*' -a
* my-branch
  remotes/origin/my-branch

Документы: https://git -scm.com / docs / git-branch

Теперь вы можете сравнить любые две ветви из всех доступных (вы также можете сравнить два локальных или два удаленных).

Здесь я сравниваю локальное с удаленным my-branch, они синхронизируются, поэтому я не получаю никакого вывода:

$ git diff my-branch remotes/origin/my-branch

Примечание: вы должны дать полные имена ветвей без кавычек.

Я также могу сравнить локальный my-branch с удаленным master. Здесь я получаю некоторый вывод, потому что удаленный my-branch не был объединен с главной веткой.

$ git diff my-branch remotes/origin/master
diff --git a/src/controllers/call.controller.js b/src/controllers/call.controller.js
index fd79b98..df3d798 100644
--- a/src/controllers/call.controller.js
+++ b/src/controllers/call.controller.js
@@ -261,7 +261,7 @@ function callController() {
   /*
    *  Function: doCall
[ . . . ]
9 голосов
/ 07 июня 2017

Вот краткий ответ, если вы сравниваете текущую ветку с тем, что хотите git pull.

git fetch
git diff FETCH_HEAD

Первая команда определит, какая удаленная ветвь соответствует вашей текущей ветке. Артефакт этого расчета в ссылке FETCH_HEAD. Затем вторая команда использует это сравнение сравнения с тем, что имеет ваша текущая ветвь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...