Первоначально я пытался, git diff HEAD origin/HEADкоторый, кажется, указывает на другую удаленную ветку, чем та, которую я намеревался. Использование полного имени ветки работает как положено.
Дина
Ответы:
595
Чтобы обновить ветки удаленного отслеживания, git fetchсначала нужно набрать, а затем:
git diff <masterbranch_path> <remotebranch_path>
Вы можете git branch -aперечислить все ветви (локальные и удаленные), затем выбрать имя ветви из списка (просто удалить remotes/из имени удаленной ветви).
Пример: git diff master origin/master(где "master" - это локальная ветвь master, а "origin / master" - удаленная, а именно, источник и ветвь master.)
Это показывает скрытность изменений в bash. Есть ли способ открыть все изменения в IDE, например, в коде VS?
Суровый Phoujdar
@Harsh Phoujdar Добавьте приведенный ниже код в свой файл .git / .gitconfig. [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 правильный.
Аман
1307
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>чтобы увидеть, что мой пуш сделает с удаленным репо.
Михал Татаринович
76
Даже короче git diff originдостаточно, если вы просто сравните со своей веткой вверх по течению.
Ludder
12
пожалуйста, добавьте git fetchв начале, это создает проблемы для новичка, как я
Saif
1
Эй, не должно ли это быть git diff <remote>/<remote branch> <local branch>? В противном случае на моем компьютере включаются добавления и удаления (git version 2.7.0.windows.2)
Martín Coll
183
Первый тип
git branch -a
получить список доступных веток. На выходе вы можете увидеть что-то вроде
Я бы определенно выбрал это в качестве ответа. Следуя вашим указаниям, я смог увидеть различия между локальной веткой и удаленной веткой. Спасибо!
ТАСС
1
Я обычно делаю, git log origin/my_branch..что будет принимать в HEADкачестве местного реф, что в основном то, что вы имеете в виду.
Руди
4
+1 за лучший ответ по моему скромному мнению. Было бы достойно +2, если бы вы упомянули «fetch» для синхронизации «удаленного» образа клонированного источника. Этап обзора статистики / цвета особенно полезен.
Bvj
3
Спасибо за один ответ, который в итоге сработал из семи или восьми «ответов», которые привели к чуть большему fatal: bad revisionили fatal: ambiguous argument. Все, что я хотел, это увидеть различие в том же файле из другой ветки, это было слишком много, чтобы спросить? Да, да, это было. :-) git diff remotes/origin/<base branch> <current branch> -- <filename>отлично работает на git 1.8.3.1
Стив Бондс
144
Если вы находитесь на определенной ветке и хотите сравнить ее с отслеживаемой веткой вверх по течению, используйте
git diff @{upstream}
если ваш апстрим не установлен (обычно так, спасибо Arijoon в комментариях)
<branchname>@{upstream}Например master@{upstream}, @{u}
суффикс
@{upstream}к ответвлению (сокращенная форма <branchname>@{u}) относится к ветви, над которой установлен ветвь, заданная branchnameдля (настроенная с branch.<name>.remoteи branch.<name>.merge). Отсутствует по branchnameумолчанию текущий.
Очень хороший ответ, просто не хватает маленькой части. Измените строку на git diff @ @{upstream}. Дополнительным @является то HEAD, где вы сейчас находитесь, так что вы сравниваете HEADс вышестоящими потоками, которые отслеживает ваша ветвь. Вы можете использовать @{push}вместо
апстрима,
3
лучший ответ, не требует извлечения пульта. нужно больше голосов!
jcomeau_ictx
3
В моллюсках я получил результат: fatal: ambiguous argument '@upstream': unknown revision or path not in the working tree. Пришлось использовать git diff @\{upstream\}вместо. Land
Лэндон Кун
Вы должны git fetchсначала, иначе это ничего не делает, не показывает вывод; протестировано удалением файла в исходном хранилище и выполнением этой команды локально. .. работает только после получения.
Кроме того, в качестве ответа, как дано, включены любые локальные изменения. иногда это желательно, а иногда нет.
Дина
44
Я гораздо лучше понимаю вывод:
git diff <remote-tracking branch> <local branch>
это показывает мне, что будет удалено и что будет добавлено, если я нажму на локальную ветку. Конечно, это то же самое, только обратное, но для меня это более читабельно, и мне удобнее смотреть на то, что произойдет.
Я получаю точно такой же результат: git diff <локальная ветка> <ветка удаленного отслеживания> или git diff <удаленная ветка> <локальная ветка>
user2928048
32
Простой способ:
git fetch
git log -p HEAD..FETCH_HEAD
Сначала будут получены изменения с вашего удаленного по умолчанию (источника). Это будет создано автоматически при клонировании репо. Вы также можете быть явным: git fetch origin master.
Затем git log используется для сравнения вашей текущей ветки с только что выбранной. (Опция -p(создать патч) - это то, что показывает различия .)
git fetch - все получит все со всех пультов. git fetch должно быть достаточно, если вы используете удаленный источник по умолчанию.
Кристоф Келлер
Удивительно, что через 8 лет мы получаем полный ответ, который правильно объясняет шаги. Мы можем сделать --help, чтобы получить команды. Так что о понимании их.
gdbj
11
Пусть ваша рабочая ветвь развитие и хотят провести различие между местной ветвью разработки и удаленным филиалом развития, тот случаем, синтаксис должен быть как git diff remotes/origin/development..development
или
Здесь у меня две локальные ветви ( my-branchи master) и 4 (удаленные some-branch, some-other-branch, master, и my-branch).
Кроме того, звездочка рядом my-branchуказывает на то, что я в данный момент нахожусь в этой ветке (вы также узнаете об этом, используя команду, git statusкоторая выдаст:) On branch my-branch..
Примечание: удаленные ветви в оболочке git bash показаны красным, а локальные - зеленым.
Чтобы показать только локальные ветви, вы можете испытать соблазн, 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
Теперь вы можете сравнить любые две ветви из всех доступных (вы также можете сравнить два локальных или два удаленных).
Здесь я сравниваю локальный с удаленным my-branch, они синхронизируются, поэтому я не получаю никакого вывода:
$ git diff my-branch remotes/origin/my-branch
Примечание: вы должны дать полные имена ветвей без кавычек.
Я также могу сравнить местный my-branchс удаленным master. Здесь я получаю некоторый вывод, потому что пульт my-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, в моем случае:
Я думаю, что это интересно, потому что это сравнение, которое я могу сделать перед коммитом и push. К сожалению, в Windows vimdiff для показа ужасен; Есть ли способ использовать что-нибудь лучше, как Notepad ++?
Стефано Скарпанти
3
пример
git diff 'master' 'testlocalBranch'
Если вы используете редактор, такой как веб-шторм, вы можете щелкнуть правой кнопкой мыши по файлу, выбрать сравнить с веткой и ввести / выбрать вашу ветку.
Что это добавляет к принятому 7,5-летнему ответу с 170+ ответами?
Марк Роттвил
Это для пользователя mrblah или для похожих пользователей, которые добавили комментарий к принятому ответу. Синтаксис отличается от примера, и пример помогает больше с точки зрения новичка.
Kurkula
2
В таком случае, это должно быть в комментарии к этому ответу.
рачит
1
В VS 2019, просто сделайте FETCH Не тяните код.
Это то, что я сделал. Добавлен ниже в файле .gitconfig, чтобы я мог использовать Beyond Compare
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 :)
Если вы используете TortoiseGit (он предоставляет графический интерфейс для Git), вы можете щелкнуть правой кнопкой мыши свою папку репозитория Git и нажать Git Sync.
Вы можете выбрать свои ветви для сравнения, если они не выбраны. Чем вы можете просмотреть различия совершать. Вы также можете щелкнуть правой кнопкой мыши любой коммит, Compare with previous revisionчтобы просмотреть различия между собой.
git diff HEAD origin/HEAD
который, кажется, указывает на другую удаленную ветку, чем та, которую я намеревался. Использование полного имени ветки работает как положено.Ответы:
Чтобы обновить ветки удаленного отслеживания,
git fetch
сначала нужно набрать, а затем:Вы можете
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 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 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Если вы находитесь на определенной ветке и хотите сравнить ее с отслеживаемой веткой вверх по течению, используйте
если ваш апстрим не установлен (обычно так, спасибо Arijoon в комментариях)
Благодаря этому ответу , git документация для определения ревизий имеет:
источник
git diff @ @{upstream}
. Дополнительным@
является тоHEAD
, где вы сейчас находитесь, так что вы сравниваетеHEAD
с вышестоящими потоками, которые отслеживает ваша ветвь. Вы можете использовать@{push}
вместоfatal: ambiguous argument '@upstream': unknown revision or path not in the working tree
. Пришлось использоватьgit diff @\{upstream\}
вместо. Landgit fetch
сначала, иначе это ничего не делает, не показывает вывод; протестировано удалением файла в исходном хранилище и выполнением этой команды локально. .. работает только после получения.Я гораздо лучше понимаю вывод:
git diff <remote-tracking branch> <local branch>
это показывает мне, что будет удалено и что будет добавлено, если я нажму на локальную ветку. Конечно, это то же самое, только обратное, но для меня это более читабельно, и мне удобнее смотреть на то, что произойдет.
источник
Простой способ:
Сначала будут получены изменения с вашего удаленного по умолчанию (источника). Это будет создано автоматически при клонировании репо. Вы также можете быть явным:
git fetch origin master
.Затем git log используется для сравнения вашей текущей ветки с только что выбранной. (Опция
-p
(создать патч) - это то, что показывает различия .)источник
Вот как я это делаю.
он будет извлекать все с пульта, поэтому при проверке разницы он будет сравнивать разницу с удаленной веткой.
Приведенная выше команда отобразит все ветви.
Теперь вы можете проверить разницу следующим образом.
это сравнит вашу локальную ветку с удаленной веткой
источник
Пусть ваша рабочая ветвь развитие и хотят провести различие между местной ветвью разработки и удаленным филиалом развития, тот случаем, синтаксис должен быть как
git diff remotes/origin/development..development
или
git fetch origin git diff origin/development
источник
тл; др :
git diff <local branch> <remote branch>
При использовании git на оболочке, мне нравится сначала ориентироваться, оглядываясь вокруг. Вот команда, чтобы показать все ветви
Здесь у меня две локальные ветви (
my-branch
иmaster
) и 4 (удаленныеsome-branch
,some-other-branch
,master
, иmy-branch
).Кроме того, звездочка рядом
my-branch
указывает на то, что я в данный момент нахожусь в этой ветке (вы также узнаете об этом, используя команду,git status
которая выдаст:)On branch my-branch.
.Примечание: удаленные ветви в оболочке git bash показаны красным, а локальные - зеленым.
Если вы просто хотите показать удаленные ветки :
Чтобы показать только локальные ветви, вы можете испытать соблазн,
git branch -l
но это совершенно другая команда. Для показа локальных веток используйтеgit branch
без опцийЧтобы завершить обзор основных параметров ветки, есть нечто
--list
противоположное тому, что вы можете ожидать - разрешить фильтрацию . Используйте это с шаблоном как это:Вы можете также комбинировать
--list
с параметрами-a
и ,-r
но убедитесь , что адаптировать шаблон соответствующим образом ( помните: удаленные ветви начинаются с «пультами» ). Пример:Документы: https://git-scm.com/docs/git-branch
Теперь вы можете сравнить любые две ветви из всех доступных (вы также можете сравнить два локальных или два удаленных).
Здесь я сравниваю локальный с удаленным
my-branch
, они синхронизируются, поэтому я не получаю никакого вывода:Примечание: вы должны дать полные имена ветвей без кавычек.
Я также могу сравнить местный
my-branch
с удаленнымmaster
. Здесь я получаю некоторый вывод, потому что пультmy-branch
не был объединен с основной веткой.источник
Если вы хотите , чтобы увидеть разницу , как только имена файлов изменились затем использовать:
git diff --name-status <remote-branch> <local-branch>
,иначе это было бы показать все различия между двумя ветвями:
git diff <remote-branch> <local-branch>
источник
Вот краткий ответ, если вы сравниваете текущую ветку с тем, что хотите
git pull
.Первая команда определит, какая удаленная ветвь соответствует вашей текущей ветке. Артефакт этого расчета в
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, если не требуется сравнение с новыми коммитами)
источник
пример
Если вы используете редактор, такой как веб-шторм, вы можете щелкнуть правой кнопкой мыши по файлу, выбрать сравнить с веткой и ввести / выбрать вашу ветку.
источник
В VS 2019, просто сделайте FETCH Не тяните код.
Это то, что я сделал. Добавлен ниже в файле .gitconfig, чтобы я мог использовать Beyond Compare
Добавлено ниже
Откройте командную строку и перейдите в рабочий каталог. Я дал ниже, чтобы сравнить локальную ветку DEV с удаленной веткой DEV
Это откроет Beyond Compare и откроет каталоги с файлами, которые отличаются. Если никаких изменений Beyond Compare не запустится.
источник
Интересно, есть ли какие-либо изменения в моей основной ветке ...
источник
Настроить
git config alias.udiff 'diff @{u}'
Diffing HEAD с HEAD @ {upstream}
Diffing с произвольным удаленным ответвлением
Это отвечает на вопрос в вашем заголовке («его удаленный»); если вы хотите использовать «удаленный» (который не настроен в качестве восходящего потока для ветви), вам нужно настроить его непосредственно. Вы можете увидеть все удаленные ветви со следующим:
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
твоя тема ветка.источник
Допустим, вы уже настроили свой
origin
удаленный репозиторий. Затем,git diff <local branch> <origin>/<remote branch name>
источник
пытаться:
Предполагая, что вы хотите сравнить ваши текущие локальные ветви
HEAD
с источником. И при условии, что вы находитесь в местном отделении. :)источник
Если вы используете TortoiseGit (он предоставляет графический интерфейс для Git), вы можете щелкнуть правой кнопкой мыши свою папку репозитория Git и нажать
Git Sync
.Вы можете выбрать свои ветви для сравнения, если они не выбраны. Чем вы можете просмотреть различия совершать. Вы также можете щелкнуть правой кнопкой мыши любой коммит,
Compare with previous revision
чтобы просмотреть различия между собой.источник