Как сравнить файлы из двух разных ветвей?
У меня есть скрипт, который отлично работает в одной ветке и сломан в другой. Я хочу посмотреть на две версии бок о бок и посмотреть, что отличается. Есть ли какие-то способы сделать это?
для ясности Я не ищу инструмент сравнения (я использую Beyond Compare). Я ищу команду git diff, которая позволит мне сравнить главную версию с моей текущей версией ветви, чтобы увидеть, что изменилось. Я не в середине слияния или чего-то такого. Я просто хочу сказать что-то вроде
git diff mybranch/myfile.cs master/myfile.cs
8 ответов
git diff
может показать вам разницу между двумя коммитами:
git diff mybranch master -- myfile.cs
или, что то же самое:
git diff mybranch..master -- myfile.cs
используя последний синтаксис, если любая из сторон HEAD
его можно опустить (например,master..
сравнивает master
to HEAD
).
вы также можете быть заинтересованы в mybranch...master
(от git diff
docs):
эта форма предназначена для просмотра изменений в ветке, содержащей и до второй
<commit>
, начиная с a общий предок обоих<commit>
.git diff A...B
эквивалентноgit diff $(git-merge-base A B) B
.
другими словами, это даст различные изменения в master
так как он расходился с mybranch
(но без новых изменений с тех пор в mybranch
).
во всех случаях!--16--> разделитель перед именем файла указывает конец флагов командной строки. Это необязательно, если Git не запутается, если аргумент ссылается на фиксацию или файл, но в том числе это не плохо привычка. См.https://stackoverflow.com/a/13321491/54249 для нескольких примеров.
те же аргументы можно передать в git difftool
если у вас настроена.
Вы можете сделать это:
git diff branch1:file branch2:file
Если у вас настроен difftool, вы также можете:
git difftool branch1:file branch2:file
вопрос: как просмотреть вывод git diff с помощью программы visual diff
более современный синтаксис:
git diff ..master path/to/file
префикс с двумя точками означает "из текущего рабочего каталога в". Вы также можете сказать:
-
master..
, то есть наоборот выше. Это то же самое, чтоmaster
. -
mybranch..master
, явно ссылаясь на состояние, отличное от текущего рабочего дерева. -
v2.0.1..master
, т. е. ссылка на тег. -
[refspec]..[refspec]
, в основном что-либо идентифицируемое как состояние кода для мерзавец.
есть много способов сравнить файлы из двух разных ветвей:
-
Вариант 1: если вы хотите сравнить файл из N конкретной ветви в другую конкретную ветвь:
git diff branch1name branch2name path/to/file
пример:
git diff mybranch/myfile.cs mysecondbranch/myfile.cs
в этом примере вы сравниваете файл в ветви" mybranch " с файл в " mysecondbranch" отделение.
-
Вариант 2: простой способ:
git diff branch1:file branch2:file
пример:
git diff mybranch:myfile.cs mysecondbranch:myfile.cs
этот пример аналогичен варианту 1.
-
Вариант 3: если вы хотите сравнить свой текущий рабочий каталог с некоторыми бранч:
git diff ..someBranch path/to/file
пример:
git diff ..master myfile.cs
в этом примере вы сравниваете файл из вашей фактической ветви с файл в главной ветви.
Я просто делаю git diff branch1 branch2 path/to/file
это проверяет наличие различий между файлами. Изменения в branch1
будет красным. Изменения в branch2
будет зеленым.
предполагается, что branch1
и branch2
будущее. Вы можете изменить это, изменив порядок ветвей в diff:git diff branch2 branch1
соглашаясь с ответом, предложенным @dahlbyk. Если вы хотите, чтобы diff был записан в файл diff для обзоров кода, используйте следующую команду.
git diff branch master -- filepath/filename.extension > filename.diff --cached
лучший способ сделать это с помощью git diff
следующим образом:
git diff <source_branch> <target_branch> -- file_path
Он будет проверять разницу между файлами в тех ветках. Взгляните на эту статью для получения дополнительной информации о команды git и как они работают.
чтобы сравнить два файла в Git bash, вам нужно использовать команду:
git diff <Branch name>..master -- Filename.extension
эта команда покажет разницу между двумя файлами в самом bash.