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 on windows требует, чтобы полная спецификация элементов была именем unix. т.е. branch1: full \ path \ to \ foo.txt завершается ошибкой, в то время как branch1: full / path / to / foo.txt работает нормально, как и full \ path \ to \ foo.txt (без ветки)
Eris

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

Пробовал на linux с git версии 1.8.3.1, разрешены только относительные пути.
Сола Ян

21

Sidenote: нет необходимости для полного пути, вы можете начать с ./для относительных путей. Иногда это может быть удобно.

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.