diff текущая рабочая копия файла с подтвержденной копией другой ветви

158

У меня есть репо с файлом fooв основной ветке. Я переключился на ветку бара и внес некоторые изменения в foo. Как я могу теперь запустить git diffмежду этой копией (которая еще не зафиксирована) и копией главной ветви?

Dogbert
источник

Ответы:

151

Следующие работы для меня:

git diff master:foo foo

В прошлом это могло быть:

git diff foo master:foo

Марк Лонгэйр
источник
9
Каждый раз, когда я вижу ваш ответ по поводу git diff, я всегда думаю о stackoverflow.com/questions/5256249/git-diff-doesnt-show-enough/…
VonC
@VonC: спасибо, приятно знать, что их стоило рисовать :) Кстати, ты случайно не понял странность, с которой я обновил свой ответ?
Марк Лонгэйр
2
Вы пробовали с --, чтобы отделить параметры от аргументов пути? git diff -- master:foo foo
VonC
1
На 1.8 git diff -- master:foo fooне работает - кажется, что arg рассматривается master:fooкак несуществующее имя файла (и игнорирует его) вместо file-in-a-branch. Попробуйте переключить последние 2 аргумента - если это сработало, сравнение diff должно быть обратным, но вывод не меняется.
Кельвин
9
Для меня все наоборот - я могу, git diff master:foo fooно не наоборот. Я тоже этого не понимаю. С git 1.7.9.5 / Ubuntu 12.04 я могу, по крайней мере, сделать git diff -R master:foo fooто, что мне нужно. Когда я пытаюсь это с msysgit 1.9.4 / Windows 7 x64, я получаю fatal: unable to read 0000000000000000000000000000000000000000. Без -Rя получаю то же сообщение об ошибке, что и вы с git 1.7.9.5, но с 1.9.4 я получаю fatal: master:foo: no such path in the working tree.
JMM
100

Вы пытаетесь сравнить ваше рабочее дерево с конкретным именем ветви, поэтому вы хотите это:

git diff master -- foo

Который из этой формы git-diff (см. Страницу руководства git-diff)

   git diff [--options] <commit> [--] [<path>...]
       This form is to view the changes you have in your working tree
       relative to the named <commit>. You can use HEAD to compare it with
       the latest commit, or a branch name to compare with the tip of a
       different branch.

К вашему сведению, есть также --cached(иначе --staged) опция для просмотра различий того, что вы поставили, а не всего в вашем рабочем дереве:

   git diff [--options] --cached [<commit>] [--] [<path>...]
       This form is to view the changes you staged for the next commit
       relative to the named <commit>.
       ...
       --staged is a synonym of --cached.
Джордан Бро
источник
2
Спасибо. Понятия не имею почему, но только этот ответ работал для меня с git 1.8.1 в Linux.
srking
Отлично, спасибо. Я был одержим желанием включить имя моей текущей ветви в команду diff, но я вижу, что это не нужно.
йо
Это сработало для меня несколько месяцев назад, но сейчас не похоже. В настоящее время я нахожусь в git версии 2.7.4 (Apple Git-66); Я не знаю, что у меня было раньше.
hBrent
@hBrent это все еще работает для меня на OSX 10.11 с git 2.7.3. Вот быстрое репо с инструкциями, если это будет полезно: github.com/jordan-brough/git-diff-test
Джордан Броу
Спасибо @JordanBrough.
hBrent
14

Также: git diff master..feature foo

Поскольку git diff foo master:fooне работает на каталоги для меня.

ArtBIT
источник
И я нет. Это вещь для Windows?
Скотт Стаффорд
@ ScottStafford Я нахожусь на Ubuntu, так что нет, не похоже, что это просто Windows.
ArtBIT
Работает для меня до тех пор, пока я явно даю названия обеих ветвей (windows) git diff branch1:foo master:foo
Meep
12
git difftool tag/branch filename
Adir
источник
Это единственный ответ, который сработал для меня для сравнения между локальной рабочей копией файла и версией файла в удаленном репо (не «происхождение»). Спасибо, Адир и Баз
Мышь
git difftoolне имеет -vвыбора в соответствии с docs git-scm.com/docs/git-difftool . Вы имели в виду -y?
ks1322
10
git diff mybranch master -- file

также должен работать

Наойз Голден
источник
4
Это работает только для файлов, переданных в mybranch, а не для текущей рабочей копии файла.
йо
что означает «-» выше
Pushparaj
Это позволяет сравнивать в обоих направлениях: git diff deployment master -- fileи git diff master deployment -- fileработают как положено с любыми 2 ветками .
викторхо
0

Чтобы увидеть локальные изменения, сравните с вашей текущей веткой

git diff .

Чтобы увидеть локальные изменения, сравните с любой другой существующей веткой

git diff <branch-name> .

Чтобы увидеть изменения конкретного файла

git diff <branch-name> -- <file-path>

Убедитесь, что вы бежите git fetchв начале.

КТА
источник