Как я могу увидеть diff
между локальной веткой и удаленной веткой?
git diff HEAD origin/HEAD
который, кажется, указывает на другую удаленную ветку, чем та, которую я намеревался. Использование полного имени ветки работает как положено.
Как я могу увидеть diff
между локальной веткой и удаленной веткой?
git diff HEAD origin/HEAD
который, кажется, указывает на другую удаленную ветку, чем та, которую я намеревался. Использование полного имени ветки работает как положено.
Ответы:
Чтобы обновить ветки удаленного отслеживания, git fetch
сначала нужно набрать, а затем:
git diff <masterbranch_path> <remotebranch_path>
Вы можете git branch -a
перечислить все ветви (локальные и удаленные), затем выбрать имя ветви из списка (просто удалить remotes/
из имени удаленной ветви).
Пример: git diff master origin/master
(где "master" - это локальная ветвь master, а "origin / master" - удаленная, а именно, источник и ветвь master.)
git fetch
[diff] tool = vscode [difftool] prompt = false [difftool "vscode"] cmd = \"C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe\" \"$LOCAL\" \"$REMOTE\" --diff --wait trustExitCode = false
Убедитесь, что путь к файлу code.exe правильный.
git diff <local branch> <remote>/<remote branch>
Например git diff master origin/master
, илиgit diff featureA origin/next
Конечно, чтобы иметь указанную ветку удаленного слежения , нужно git fetch
сначала; и вам нужно, чтобы в удаленном хранилище была актуальная информация о ветвях.
git diff <remote>/<remote branch> <local branch>
чтобы увидеть, что мой пуш сделает с удаленным репо.
git diff origin
достаточно, если вы просто сравните со своей веткой вверх по течению.
git fetch
в начале, это создает проблемы для новичка, как я
git diff <remote>/<remote branch> <local branch>
? В противном случае на моем компьютере включаются добавления и удаления (git version 2.7.0.windows.2)
Первый тип
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 log origin/my_branch..
что будет принимать в HEAD
качестве местного реф, что в основном то, что вы имеете в виду.
fatal: bad revision
или fatal: ambiguous argument
. Все, что я хотел, это увидеть различие в том же файле из другой ветки, это было слишком много, чтобы спросить? Да, да, это было. :-) git diff remotes/origin/<base branch> <current branch> -- <filename>
отлично работает на git 1.8.3.1
Если вы находитесь на определенной ветке и хотите сравнить ее с отслеживаемой веткой вверх по течению, используйте
git diff @{upstream}
если ваш апстрим не установлен (обычно так, спасибо Arijoon в комментариях)
git diff @{push}
Благодаря этому ответу , git документация для определения ревизий имеет:
<branchname>@{upstream}
Напримерmaster@{upstream}
,@{u}
суффикс@{upstream}
к ответвлению (сокращенная форма<branchname>@{u}
) относится к ветви, над которой установлен ветвь, заданнаяbranchname
для (настроенная сbranch.<name>.remote
иbranch.<name>.merge
). Отсутствует поbranchname
умолчанию текущий.
git diff @ @{upstream}
. Дополнительным @
является то HEAD
, где вы сейчас находитесь, так что вы сравниваете HEAD
с вышестоящими потоками, которые отслеживает ваша ветвь. Вы можете использовать @{push}
вместо
fatal: ambiguous argument '@upstream': unknown revision or path not in the working tree
. Пришлось использовать git diff @\{upstream\}
вместо. Land
git fetch
сначала, иначе это ничего не делает, не показывает вывод; протестировано удалением файла в исходном хранилище и выполнением этой команды локально. .. работает только после получения.
Я гораздо лучше понимаю вывод:
git diff <remote-tracking branch> <local branch>
это показывает мне, что будет удалено и что будет добавлено, если я нажму на локальную ветку. Конечно, это то же самое, только обратное, но для меня это более читабельно, и мне удобнее смотреть на то, что произойдет.
Простой способ:
git fetch
git log -p HEAD..FETCH_HEAD
Сначала будут получены изменения с вашего удаленного по умолчанию (источника). Это будет создано автоматически при клонировании репо. Вы также можете быть явным: git fetch origin master
.
Затем git log используется для сравнения вашей текущей ветки с только что выбранной. (Опция -p
(создать патч) - это то, что показывает различия .)
Вот как я это делаю.
#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 diff remotes/origin/development..development
или
git fetch origin
git diff origin/development
тл; др :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
[ . . . ]
Если вы хотите , чтобы увидеть разницу , как только имена файлов изменились затем использовать:
git diff --name-status <remote-branch> <local-branch>
,
иначе это было бы показать все различия между двумя ветвями:
git diff <remote-branch> <local-branch>
Вот краткий ответ, если вы сравниваете текущую ветку с тем, что хотите git pull
.
git fetch
git diff FETCH_HEAD
Первая команда определит, какая удаленная ветвь соответствует вашей текущей ветке. Артефакт этого расчета в FETCH_HEAD
ссылке. Затем вторая команда использует это сравнение сравнения с тем, что имеет ваша текущая ветвь.
Я знаю, что уже есть несколько ответов на этот вопрос, но я получаю странную ошибку при попытке большинства из них.
В моем случае у меня есть второй пульт называется 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 'master' 'testlocalBranch'
Если вы используете редактор, такой как веб-шторм, вы можете щелкнуть правой кнопкой мыши по файлу, выбрать сравнить с веткой и ввести / выбрать вашу ветку.
В 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 branch -a
- мастер
пульты / происхождение / мастер
git diff origin / master
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
Вы можете увидеть конфигурацию ветвления / отслеживания для одного пульта (например, источника) следующим образом:
git remote show origin
Как только вы определите подходящую ветку происхождения, просто сделайте обычный diff :)
git diff [MY_LOCAL] MY_REMOTE_BRANCH
Это довольно просто. Ты можешь использовать:git diff remote/my_topic_branch my_topic_branch
Где my_topic_branch
твоя тема ветка.
пытаться:
git diff origin HEAD
Предполагая, что вы хотите сравнить ваши текущие локальные ветви HEAD
с источником. И при условии, что вы находитесь в местном отделении. :)
Если вы используете TortoiseGit (он предоставляет графический интерфейс для Git), вы можете щелкнуть правой кнопкой мыши свою папку репозитория Git и нажать Git Sync
.
Вы можете выбрать свои ветви для сравнения, если они не выбраны. Чем вы можете просмотреть различия совершать. Вы также можете щелкнуть правой кнопкой мыши любой коммит, Compare with previous revision
чтобы просмотреть различия между собой.