Как сравнить локальную ветвь git с ее удаленной ветвью?
Как я могу видеть diff
между филиалом и удаленными филиалами?
16 ответов
обновить удаленные ветки, вы должны ввести git fetch
и затем :
git diff <masterbranch_path> <remotebranch_path>
вы можете git branch -a
чтобы перечислить все ветви (локальные и удаленные), затем выберите имя ветви из списка (просто удалите remotes/
от имени удаленной ветки.
пример: git diff master origin/master
(где "master" - локальная ветвь master, а" origin/master " - удаленная ветвь origin и master.)
git diff <local branch> <remote>/<remote branch>
git diff master origin/master
или git diff featureA origin/next
конечно есть сказал пульт дистанционного отслеживания ветви вам нужно git fetch
во-первых; и вам нужно иметь актуальную информацию о филиалах в удаленном репозитории.
первый тип
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 @{upstream}
вежливость ответ, документация git для С указанием изменений есть:
<branchname>@{upstream}
, например,master@{upstream}
,@{u}
Суффикс@{upstream}
к имени ветви (короткая форма<branchname>@{u}
) относится к ветвь, указанная ветвьюbranchname
намерен построить на верхняя часть (настроенная сbranch.<name>.remote
иbranch.<name>.merge
). Пропавшийbranchname
по умолчанию текущая.
Я гораздо лучше понимаю вывод:
git diff <remote-tracking branch> <local branch>
Это показывает мне, что будет отброшено и что будет добавлено, если я нажму локальную ветку. Конечно, это то же самое, только наоборот, но для меня более читабельно, и мне более комфортно смотреть на то, что произойдет.
самый простой способ:
git fetch
git log -p HEAD..FETCH_HEAD
это сначала принесет изменения с вашего пульта дистанционного управления по умолчанию (origin). Это будет создано автоматически при клонировании РЕПО. Вы также можете быть явными:git fetch origin master
.
затем git log используется для сравнения текущей ветви с только что извлеченной. (The -p
(generate patch) - это то, что показывает различия.)
пусть ваша рабочая ветвь-это разработка и вы хотите различать локальную ветвь разработки и удаленную ветвь разработки, в этом случае синтаксис должен быть похож на git diff remotes/origin/development..development
или
git fetch origin
git diff origin/development
вот как я это делаю.
#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
ссылка. Затем вторая команда использует это сравнение ссылок по сравнению с тем, что имеет ваша текущая ветвь.
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
но не забудьте соответствующим образом адаптировать свой шаблон ( помните: удаленные ветви начинаются с"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
. Здесь я получаю некоторый выход, потому что remote 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
[ . . . ]
Я знаю, что на этот вопрос уже есть несколько ответов, но я получал странную ошибку при попытке большинства из них.
в моем случае у меня есть второй пульт называется heroku
что это не the 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 diff --name-status <remote-branch> <local-branch>
,
иначе это покажет все различия между двумя ветвями:git diff <remote-branch> <local-branch>
git difftool <commit> .
Это сравнит фиксацию, которую вы хотите, с вашими локальными файлами. Не забудьте точку в конце (для локального).
например, чтобы сравнить ваши локальные файлы с некоторыми commit:
ГИТ difftool в деталях 1db1ef2490733c1877ad0fb5e8536d2935566341 .
(и вам не нужна git fetch, если не требуется сравнение с новыми коммитами)
пример
git diff 'master' 'testlocalBranch'
Если вы используете редактор, как webstorm, вы можете щелкнуть правой кнопкой мыши по файлу выберите сравнить с веткой и введите/выберите ветку.
настройка
git config alias.udiff 'diff @{u}'
сравниваете головы с головой@{вверх}
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
сравниваете с произвольным удаленную ветку
это отвечает на вопрос в вашем заголовке ("его удаленный"); если вы хотите отличить от" удаленного " (который не настроен как восходящий для ветви), вам нужно нацелить его непосредственно. Вы можете увидеть все удаленные ветви со следующим:
git branch -r
вы можете увидеть все настроенные пульты с следующее:
git remote show
вы можете увидеть конфигурацию ветви/отслеживания для одного удаленного (например, origin) следующим образом:
git remote show origin
как только вы определите соответствующую ветвь происхождения, просто сделайте нормальный diff:)
git diff [MY_LOCAL] MY_REMOTE_BRANCH
интересно, есть ли какие-либо изменения в моем мастер филиала...
- во-первых, вам нужно изменить свою ветку (если вы уже находитесь под этой веткой, вам не нужно это делать!)
git checkout master
- вы можете увидеть, какой файл был изменен в вашей главной ветви этой командой
git статус
- список ветви
git branch-a
- мастер
пульты дистанционного управления / origin / master
- найти различия
git diff origin / master