Як відрізняти місцеві неспроможні зміни та походження


141

Скажімо, я клонував сховище і почав змінювати файли. Я знаю, що якщо у мене є місцеві неспроможні зміни, я можу зробити git diff test.txtрізницю наступним чином, і це покаже мені різницю між поточною локальною HEAD та модифікованими, невідправленими змінами у файлі. Якщо я здійснюю ці зміни, я можу відрізняти їх від оригінального сховища, використовуючиgit diff master origin/master

Але чи є спосіб відрізняти локальні зміни з оригінальним сховищем на сервері перед тим, як здійснити локальне введення ? Я спробував різні перестановки git diff --cached master origin/masterне пощастило.


Мені хотілося дізнатись, наскільки мій файл змінився від останньої вчиненої версії в моїй локальній. Відповідь на моє запитання було це питання. Дякую!
Souvik Ghosh

Відповіді:


133

З огляду на те, що віддалене сховище було кешоване через git fetchнього, повинно бути можливим порівняння з цими комітами. Спробуйте наступне:

$ git fetch origin
$ git diff origin/master

5
Ах, чудово. Ключ був у тому, щоб залишити майстра. Я раніше спробував комбінацію, де я робив виборку раніше, але коли я git diff master origin/masterце робив, то все ще порівнював із скоєною версією (очевидно в ретроспективі). Але, не виходячи з майстра, тепер порівнюються локальні зміни з отриманою версією.
Чайтанья

@Chaitanya Добре, що я можу допомогти. Насправді я знаходжу різні стилі, які Git використовує трохи дратівливо: раз вам доведеться писати origin masterі десь ще origin/master. Попереду ще робота, ІМХО.
JJD

Це, здається, не працює: мастер git diff origin/masterповернення fatal: ambiguous argument 'origin/master': unknown revision or path not in the working tree.існує за походженням, хоча, наприклад, git fetch origin masterпрацює чудово,
mikemaccana

42

Я знаю, що це не відповідь на точне запитання, але я знайшов це питання, шукаючи відмінності файлу у гілці та локальному непосланому файлі, і я подумав, що поділюсь

Синтаксис:

git diff <commit-ish>:./ -- <path>

Приклади:

git diff origin/master:./ -- README.md
git diff HEAD^:./ -- README.md
git diff stash@{0}:./ -- README.md
git diff 1A2B3C4D:./ -- README.md

(Дякую Еріку Боусу за те, що не потрібно вводити ім'я файлу двічі)


Мені подобається загальне рішення краще, ніж вузьке, конкретне вище. Розумієте, де ви це знайшли?
fbicknel

Я не можу знайти документацію про деталі commit-ishта роздільник товстої кишки. Документи про git-diff , схоже, не згадують про це. Я користувався ним так довго, що не пам’ятаю, де вперше його знайшов. Напевно, приклади інших людей на інших командах, і я просто експериментував git-diff. Боюся, що ще одна відповідьcommit-ish - це найкраще, що я можу придумати на даний момент.
Нейт

3
Приємним доповненням до цього є git diff master:./ -- README.md. Таким чином, вам не потрібно вводити README.mdдвічі, і ви можете додати його до псевдоніма простіше.
Ерік Буес

Дякую @EricBoehs, це чудова пропозиція.
Нейт

1
Цей синтаксис не працює для мене ... а створює джерело , а не віддалений філія. Використання git версії 2.19.0git diff master: -- README.md.//dev/null
rustyDev

21

Щоб побачити внесені (не додані) зміни до існуючих файлів

git diff

Зауважте, що це не відстежує нові файли. Щоб побачити поетапні, незареєстровані зміни

git diff --cached


9

Якщо ви хочете візуально порівняти файли, ви можете використовувати:

git difftool

Він автоматично запустить ваш додаток для кожного зміненого файлу.

PS: Якщо ви не встановили різну програму, ви можете зробити це як у наведеному нижче прикладі (я використовую Winmerge ):

git config --global merge.tool winmerge
git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
git config --global mergetool.prompt false

чи набуває чинності ця зміна негайно?
Діліп Рагунатан

Мені просто цікаво, як це пов’язано з заданим питанням? Хіба не буде git difftool просто порівняти локальні зміни з головним? Однак ОП хоче цього між локальними змінами та віддаленим майстром.
infoclogged

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