Как сравнить локальную ветку git с ее удаленной веткой?

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

Ответы

Ответ 1

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

git diff <masterbranch_path> <remotebranch_path>

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

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

Ответ 2

git diff <local branch> <remote>/<remote branch>

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

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

Ответ 3

Первый тип

git branch -a

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

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

Тогда покажите diff

git diff --stat --color remotes/main/master..origin/master
git diff remotes/main/master..origin/master

Ответ 4

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

git diff @{upstream}

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

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

Ответ 5

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

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

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

Ответ 6

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

git fetch
git log -p HEAD..FETCH_HEAD

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

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

Ответ 7

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

git fetch origin git diff origin/development

Ответ 8

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

#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>

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

Ответ 9

tl; dr: 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 но не забудьте соответствующим образом адаптировать свой шаблон (помните: удаленные ветки начинаются с "удаленных"). Пример:

# 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
[ . . . ]

Ответ 10

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

git fetch
git diff FETCH_HEAD

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

Ответ 11

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

git diff --name-status <remote-branch> <local-branch>,

иначе это покажет все различия между двумя ветвями:

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

Ответ 12

Я знаю, что есть несколько ответов на этот вопрос, но при попытке большинства из них я получал странную ошибку.

В моем случае у меня есть второй удаленный вызов heroku, который не origin, и поскольку он не был синхронизирован, я получил эту ошибку при попытке запустить git diff master heroku/master:

fatal: ambiguous argument 'heroku/master': unknown revision or path not in the working tree.

или это при попытке другого подхода git diff master..heroku/master:

fatal: bad revision 'master..heroku/master'

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

$ git fetch heroku
$ git diff master heroku/master

Надеюсь, что эта проблема поможет другим.

Ответ 13

git difftool <commit> .

Это позволит сравнить фиксацию, которую вы хотите, с локальными файлами. Не забудьте точку в конце (для локального).

Например, чтобы сравнить ваши локальные файлы с некоторыми commit:

git difftool 1db1ef2490733c1877ad0fb5e8536d2935566341.

(и вам не нужно git fetch, если не требуется сравнение с новыми коммитами)

Ответ 14

Пример

git diff 'master' 'testlocalBranch'

Если вы используете редактор, например webstorm, вы можете щелкнуть правой кнопкой мыши по файлу, чтобы сравнить его с веткой, и набрать/выбрать ветку.

введите описание изображения здесь

введите описание изображения здесь

Ответ 15

Настроить

git config alias.udiff 'diff @{u}'

Diffing HEAD с HEAD @{upstream}

git fetch  # Do this if you want to compare with the network state of upstream; if the current local state is enough, you can skip this
git udiff

Diffing с произвольной удаленной веткой

Это отвечает на вопрос в вашем заголовке ("его удаленный"); если вы хотите использовать "удаленный" (который не настроен в качестве восходящего потока для ветки), вам нужно настроить его непосредственно. Вы можете увидеть все удаленные ветки со следующим:

git branch -r

Вы можете увидеть все настроенные пульты со следующим:

git remote show

Вы можете увидеть конфигурацию ветвления/отслеживания для одного пульта (например, источника) следующим образом:

git remote show origin

Как только вы определите подходящую ветку происхождения, просто сделайте обычный diff :)

git diff [MY_LOCAL] MY_REMOTE_BRANCH

Ответ 16

Интересно, есть ли какие-либо изменения в моей основной ветке...

  1. Во-первых, вам нужно сменить ветку (если вы уже находитесь под этой веткой, вам не нужно это делать!)

мастер проверки

  1. Вы можете увидеть, какой файл был изменен в вашей главной ветке с помощью этой команды

мерзавец статус

  1. Перечислите ветки

Git Branch -a

  • мастер
    пультов ДУ/происхождение/мастер
  1. Найти различия

git diff origin/master

Ответ 17

Это довольно просто. Вы можете использовать: git diff remote/my_topic_branch my_topic_branch

Где my_topic_branch - ваша ветка.

Ответ 18

Если вы используете TortoiseGit (он предоставляет графический интерфейс для Git), вы можете щелкнуть правой кнопкой мыши по своей папке Git-репозитория и выбрать Git Sync.

Вы можете выбрать свои ветки для сравнения, если не выбран. Чем вы можете просмотреть различия совершать. Вы также можете щелкнуть правой кнопкой мыши любой коммит, затем Compare with previous revision чтобы просмотреть различия между собой. tortoise git sync to compare remote and local branch

Ответ 19

Допустим, вы уже настроили свой origin в качестве удаленного хранилища. Затем,

git diff <local branch> <origin>/<remote branch name>