Git: Як відрізняти два різних файли в різних галузях?


170

У мене є два різних файли в різних галузях. Як я можу розмежувати їх в одній команді?

Щось на зразок

# git diff branch1/foo.txt branch2/foo-another.txt

Я міг би перевірити інший файл, відрізнити його та відновити, але це досить брудне рішення.


3
@EugenKonkov Це не дублікат, оскільки це питання задає питання, як відрізняти різні файли в різних галузях. Пов'язане запитання задає лише питання, як відрізняти один і той же файл у різних галузях.
Стів

Відповіді:


214
git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt

Ви також можете використовувати відносні шляхи:

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt

9
Дивовижно! Я, звичайно, не міг зробити це з git help diff. До речі, вони не повинні бути іменами гілок попереду колонок, але вони можуть бути будь-якими посиланнями на введення (наприклад, значення SHA-1).
Стів Йоргенсен

3
Важлива примітка: Git для Windows вимагає, щоб повна itemspec була ім'ям Unix. тобто відділення1: повний \ шлях \ до \ foo.txt не вдається, тоді як відділення1: повне / шлях / до / фоо.тексту працює нормально, як і повний \ шлях \ до \ фоо.текст (немає гілки)
Еріс

скористайтеся, git difftoolа потім видаліть branch2:і, що дозволить вам редагувати файл у поточному робочому дереві (щоб змінити зміни з branch1)
gMale

Пробували на Linux з git версією 1.8.3.1, дозволені лише відносні шляхи.
Сола Ян

21

Сторінка: немає необхідності в повному обсязі шляхів, ви можете почати з ./відносних шляхів. Іноді це може бути зручно.

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt

2

Існує багато способів порівняння файлів із двох відділень. Наприклад:

  • Якщо ім’я однакове або інше:

     git diff branch1:file branch2:file
    

    Приклад:

     git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt
    
  • Тільки якщо ім'я збігається та ви хочете порівняти поточну робочу директорію з якоюсь галуззю:

    git diff ..someBranch path/to/file
    

    Приклад:

    git diff ..branch2 full/path/to/foo.txt
    

    У цьому прикладі ви порівнюєте файл з вашої фактичної гілки з файлом у головній гілці.

Ви можете перевірити цю відповідь:

Порівняйте файл із двох різних гілок у Git


1

Позабірна відповідь - дивіться коментарі

Просто додати його, я вважаю це дуже простим синтаксисом:

git diff <branch1> <branch2> <filepath>

Також працює з відносними характеристиками, наприклад, наприклад:

# compare the previous committed state from HEAD with the state branch1 was 3 commits ago
git diff HEAD^ <branch1>~3 <filepath>

1
ОП спеціально просила "різні файли". Ваша відповідь полягає у порівнянні одного і того ж файлу у двох різних галузях.
Етьєн

@EtienneMiret Ви абсолютно праві, я пропустив цей важливий момент. Відповідь поза темою.
RomainValeri

-1

Ви можете вказати початок і діапазон, git diffдо якого слід застосувати. Діапазон вказується ..позначенням.

branch1=somebranch
branch2=someotherbranch
git diff ${branch1}..${branch2} -- file_path

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