відмінна поточна робоча копія файлу із скоєною копією іншої гілки


158

У мене є репо з файлом fooу головній гілці. Я перейшов на відділення бару і вніс деякі зміни foo. Як тепер я можу запустити git diffміж цією копією (яка ще не здійснена) та копією головного відділення?

Відповіді:


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
Ви намагалися з a --, щоб відокремити параметри від аргументів шляху? git diff -- master:foo foo
VonC

1
У версії 1.8 git diff -- master:foo fooне працює - це здається, що аргумент ставиться до master:fooнеіснуючого імені файлу (і ігнорує його) замість файлу в а-філії. Спробуйте перемкнути останні два аргументи - якщо це спрацювало, порівняння 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.

FYI, також є варіант --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.
шприц

Відмінно, дякую. Я затримався, хотів включити ім'я моєї поточної гілки в команду diff, але я бачу, що це не потрібно.
yoyo

Це працювало для мене кілька місяців тому, але, схоже, це не зараз. На даний момент я перебуваю на 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як не працює для мене каталоги.


Я теж ні. Це річ з Windows?
Скотт Стаффорд,

@ScottStafford Я на Ubuntu, так що ні, не здається, це просто річ з Windows.
ArtBIT

Працює для мене до тих пір, коли я чітко даю обидві назви гілок (windows) git diff branch1:foo master:foo
Meep

12
git difftool tag/branch filename

Це єдина відповідь, яка працювала для мене для порівняння між локальною робочою копією файлу та версією цього файлу у віддаленому репо-файлі (не "походження"). Спасибі, Адір та Баз
миша

git difftoolне має жодної -vопції згідно з документами git-scm.com/docs/git-difftool . Ви мали на увазі -y?
ks1322

10
git diff mybranch master -- file

також повинні працювати


4
Це працює лише для файлів, присвячених моєму відділенню, а не для поточної робочої копії файлу.
yoyo

що означає "-" вище
Pushparaj

Це дозволяє порівняти в обох напрямках: git diff deployment master -- fileі git diff master deployment -- fileпрацювати, як очікувалося, з будь-якими 2 відділеннями .
viktorkho

0

Щоб побачити місцеві зміни порівняно з вашою поточною галуззю

git diff .

Щоб побачити місцеві зміни, порівняйте будь-яку іншу гілку

git diff <branch-name> .

Щоб побачити зміни певного файлу

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

Переконайтеся, що ви бігали git fetchна початку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.