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


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.