файлов - git сравнить два репозитория




Как сравнить файлы из двух разных ветвей? (6)

Более современный синтаксис:

git diff ..master path/to/file

Префикс с двумя точками означает «от текущего рабочего каталога до». Вы также можете сказать:

  • master.. , т.е. обратная сторона выше. Это то же самое, что и master .
  • mybranch..master , явно ссылаясь на состояние, отличное от текущего рабочего дерева.
  • v2.0.1..master , т.е. ссылка на тег.
  • [refspec]..[refspec] , в основном все, что можно идентифицировать как состояние кода для git.

У меня есть скрипт, который отлично работает в одной ветке и разбивается на другую. Я хочу посмотреть на две версии бок о бок и посмотреть, что по-другому. Есть ли способы сделать это?

Чтобы быть ясным, я не ищу инструмент сравнения (я использую Beyond Compare). Я ищу команду git diff, которая позволит мне сравнить главную версию с моей текущей версией ветви, чтобы увидеть, что изменилось. Я не в середине слияния или чего-то еще. Я просто хочу сказать что-то вроде

git diff mybranch/myfile.cs master/myfile.cs


Соглашаясь с ответом, предложенным @dahlbyk. Если вы хотите, чтобы diff был записан в файл diff для просмотра кода, используйте следующую команду.

git diff branch master -- filepath/filename.extension > filename.diff --cached

Существует множество способов сравнить файлы из двух разных ветвей:

  • Вариант 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


git diff может показать вам разницу между двумя коммитами:

git diff mybranch master -- myfile.cs

Или, что эквивалентно:

git diff mybranch..master -- myfile.cs

Используя последний синтаксис, если обе стороны HEAD его можно опустить (например, master.. сравнивает master с HEAD ).

Вы также можете быть заинтересованы в mybranch...master (from git diff docs ):

Эта форма предназначена для просмотра изменений в ветке, содержащей и до второго <commit> , начиная с общего предка обоих <commit> . git diff A...B эквивалентно git diff $(git-merge-base AB) B

Другими словами, это приведет к разным изменениям в master mybranch поскольку оно отклонилось от mybranch (но без новых изменений с тех пор в mybranch ).

Во всех случаях разделитель перед именем файла указывает конец флагов командной строки. Это необязательно, если Git не запутается, если аргумент ссылается на фиксацию или файл, но в том числе и не плохая привычка. См. https://.com/a/13321491/54249 для нескольких примеров.

Те же аргументы могут быть переданы git difftool если вы настроили один.







git-diff