Как сравнить локальную ветку git с ее удаленной веткой?
Как я могу увидеть diff
между локальной веткой и удаленной веткой?
28 ответов
Чтобы обновить ветки удаленного отслеживания, вам нужно набрать git fetch
сначала а потом:
git diff <masterbranch_path> <remotebranch_path>
Вы можете git branch -a
для вывода списка всех филиалов (локальных и удаленных), затем выберите название филиала из списка (просто удалите remotes/
из названия удаленной ветки.
Пример: git diff master origin/master
(где "master" - это локальная ветвь master, а "origin/master" - удаленная, а именно, источник и ветвь master.)
git diff <local branch> <remote>/<remote branch>
Например git diff master origin/master
, или же git diff featureA origin/next
Конечно, чтобы иметь удаленное отслеживание, вам нужно git fetch
первый; и вам нужно, чтобы он имел актуальную информацию о ветвях в удаленном хранилище.
Если вы находитесь в определенной ветке и хотите сравнить ее с отслеживаемой веткой вверх по течению, используйте
git diff @{upstream}
Благодаря этому ответу, git документация для определения ревизий имеет:
<branchname>@{upstream}
например,master@{upstream}
,@{u}
Суффикс@{upstream}
ответвлению (краткая форма<branchname>@{u}
) относится к ветви, указанной в ветвиbranchname
установлен для сборки поверх (настроен сbranch.<name>.remote
а такжеbranch.<name>.merge
). Пропавшийbranchname
по умолчанию текущий.
Первый тип
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
Я намного лучше понимаю вывод:
git diff <remote-tracking branch> <local branch>
это показывает мне, что будет удалено и что будет добавлено, если я нажму на локальную ветку. Конечно, это то же самое, только обратное, но для меня это более читабельно, и мне удобнее смотреть на то, что произойдет.
Простой способ:
git fetch
git log -p HEAD..FETCH_HEAD
Сначала будут получены изменения с вашего удаленного по умолчанию (источника). Это будет создано автоматически при клонировании репо. Вы также можете быть явным: git fetch origin master
,
Затем git log используется для сравнения вашей текущей ветки с только что выбранной. (The -p
Опция (создать патч) - это то, что показывает различия.)
тл; др: 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
[ . . . ]
Вот как я это делаю.
#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>
это сравнит вашу локальную ветку с удаленной веткой
Вот краткий ответ, если вы сравниваете текущую ветку с тем, что хотите git pull
,
git fetch
git diff FETCH_HEAD
Первая команда определит, какая удаленная ветвь соответствует вашей текущей ветке. Артефакт этого расчета в FETCH_HEAD
ссылка. Затем вторая команда использует это сравнение сравнения с тем, что имеет ваша текущая ветвь.
Пусть ваша рабочая ветвь находится в стадии разработки и вы хотите различать локальную ветку разработки и удаленную ветку разработки, в этом случае синтаксис должен быть таким: git diff remotes/origin/development..development
или же
git fetch origin
git diff origin/development
Если вы хотите увидеть разницу только в изменении имен файлов, используйте: git diff --name-status <remote-branch> <local-branch>
,
иначе это покажет все различия между двумя ветвями: git diff <remote-branch> <local-branch>
Я знаю, что уже есть несколько ответов на этот вопрос, но я получаю странную ошибку при попытке большинства из них.
В моем случае у меня есть второй пульт под названием 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
Надеюсь, что это поможет другим с этой же проблемой.
git difftool <commit> .
Это позволит сравнить коммит вы хотите с вашими локальными файлами. Не забывайте точку в конце (для местного).
Например, чтобы сравнить ваши локальные файлы с некоторыми коммитами:
git difftool 1db1ef2490733c1877ad0fb5e8536d2935566341.
(и вам не нужен git fetch, если не требуется сравнение с новыми коммитами)
Пытаться :
git diff origin HEAD
Предполагая, что вы хотите различать текущую локальную ветку HEAD
против происхождения. И если вы находитесь в местной ветке.:)
Первое, что вам нужно сделать, это запустить:
git fetch
в вашем местном отделении
если вы видите изменения в результатах консоли, например:
'diff --git a/versions.txt b/versions.txt
index 82d6379..794e6c7 100644
--- a/versions.txt
+++ b/versions.txt
@@ -9,3 +9,4 @@ version8
version 9 let it fetch yes
let see changes ok ?
another line
+second line^M'
, это означает, что в этом удаленном репозитории есть изменения, которых нет в вашем локальном, вы можете проверить, что удаленный репозиторий опережает локальный репозиторий, используя:
git log origin/master
git log удаленное/локальное репо
теперь запустите:
git diff master origin/master
git diff localRepo RemoteRepo/localRepo , чтобы вы могли увидеть разницу
обратите внимание, что запуск: git log origin/master в качестве первого шага не покажет, есть ли изменения или нет, вы должны сначала получить
затем вы можете перенести эти изменения в свой локальный репозиторий, используя:
git pull origin master
git pull RemoteRepo localRepo
Пример
git diff 'master' 'testlocalBranch'
Если вы используете редактор, такой как webstorm, вы можете щелкнуть правой кнопкой мыши по файлу, выбрать сравнение с веткой и ввести / выбрать вашу ветку.
Удобная однострочная функция для сравнения текущей ветки с ее состоянием на удаленном компьютере (т.е. как ответить на вопрос «что изменится, когда я нажму?») следующим образом:
git diff origin/$(git rev-parse --abbrev-ref HEAD)
Интересно, есть ли какие-либо изменения в моей основной ветке...
- Во-первых, вам нужно изменить свою ветку (если вы уже находитесь под этой веткой, вам не нужно это делать!)
мастер проверки
- Вы можете увидеть, какой файл был изменен в вашей главной ветке с помощью этой команды
мерзавец статус
- Перечислите ветви
git branch -a
- мастер
пультов ДУ / происхождение / мастер
- Найти различия
git diff origin/master
Я продолжал видеть эту ошибку
git diff main origin/master
fatal: ambiguous argument 'main': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
Решение: я должен был
git push
сначала (поскольку и удаленный, и локальный должны быть обновлены), а затем это сработало:
git diff master origin/master
В VS 2019 просто выполните FETCH Не извлекайте код.
Вот что я сделал. Добавлен ниже в файл.gitconfig, чтобы я мог использовать Beyond Compare
File location: C:\Users\[username]\.gitconfig
Добавлено ниже
[diff]
tool = bc
[difftool "bc"]
path = c:/Program Files/Beyond Compare 4/bcomp.exe
Откройте командную строку и перейдите в рабочий каталог. Я дал ниже, чтобы сравнить локальную ветку DEV с удаленной веткой DEV
git difftool dev origin/dev --dir-diff
Это откроет Beyond Compare и откроет каталоги с разными файлами. При отсутствии изменений Beyond Compare не запустится.
Это довольно просто. Ты можешь использовать: git diff remote/my_topic_branch my_topic_branch
куда my_topic_branch
это ваша тема ветка.
FWIW вы можете использовать
--compact-summary
вариант.
man git diff
Вывести сжатую сводку расширенной информации заголовка, такой как создание или удаление файлов («новые» или «исчезнувшие», необязательно «+l», если это символическая ссылка) и изменения режима («+x» или «-x» для добавления или удаления исполняемый бит соответственно) в diffstat. Информация помещается между частью имени файла и частью графика. Подразумевается --stat.
например
git diff $(current_branch) origin/$(current_branch)
Для подсчета различных коммитов от HEAD до origin / master:
git удаленное обновление git rev-list HEAD..origin/master --count
Чтобы получить текущий хэш-идентификатор фиксации HEAD:
git rev-parse HEAD
Чтобы получить хэш-идентификатор удаленного источника / основного коммита:
git rev-parse origin / master
Вот один лайнер. Просто измените название ветки.
git diff YOUR_BRANCH $(git remote)/YOUR_BRANCH
В android studio можно увидеть разницу между ветками с помощью графического интерфейса. Выберите удаленную ветку и и из списка "Сравнить с текущим". После этого вы можете выбрать вкладку файлов, чтобы увидеть, есть ли какие-либо файлы с разницей в содержании между двумя ветвями. Если файл не отображается, значит, обе ветки обновлены друг для друга.
Настроить
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
Допустим, вы уже настроили origin
в качестве удаленного хранилища. Затем,
git diff <local branch> <origin>/<remote branch name>
Если вы используете TortoiseGit (он предоставляет графический интерфейс для Git), вы можете щелкнуть правой кнопкой мыши свою папку репозитория Git, а затем нажать Git Sync
,
Вы можете выбрать свои ветви для сравнения, если не выбран. Чем вы можете просмотреть различия совершать. Вы также можете щелкнуть правой кнопкой мыши любой коммит затем Compare with previous revision
чтобы увидеть различия бок о бок.