Как скопировать версию одного файла из одной ветки git в другую?
-
08-07-2019 - |
Вопрос
У меня есть две ветки, которые полностью объединены.
Однако после завершения слияния я понимаю, что один файл был испорчен слиянием (кто-то другой сделал автоформат, хах), и было бы проще перейти на новую версию в другой ветке, и затем повторно вставьте мое изменение в одну строку после переноса его в мою ветку.
Итак, какой самый простой способ сделать это в git?
Решение
Запустите это из ветки, в которой вы хотите, чтобы файл оказался:
git checkout otherbranch myfile.txt
Общие формулы:
git checkout <commit_hash> <relative_path_to_file_or_dir>
git checkout <remote_name>/<branch_name> <file_or_dir>
Некоторые примечания (из комментариев):
- Используя хеш коммита, вы можете извлечь файлы из любого коммита.
- Это работает для файлов и каталогов
- перезаписывает файл
myfile.txt
иmydir
- Подстановочные знаки не работают, но относительные пути работают.
- Можно указать несколько путей
альтернатива:
git show commit_id:path/to/file > path/to/file
Другие советы
Я попал на этот вопрос в похожем поиске. В моем случае я искал, чтобы извлечь файл из другой ветви в текущий рабочий каталог, который отличался от исходного местоположения файла. Ответ :
git show TREEISH:path/to/file >path/to/local/file
Как насчет использования команды извлечения:
git diff --stat "$branch"
git checkout --merge "$branch" "$file"
git diff --stat "$branch"
После ответа madlep вы также можете просто скопировать один каталог из другой ветки с помощью большого двоичного каталога.
git checkout other-branch app/**
Что касается вопроса опера, если вы изменили там только один файл, то это будет нормально ^ _ ^
1) Убедитесь, что вы находитесь в филиале, где вам нужна копия файла.
Например: я хочу файл подветвления в master, поэтому вам нужно оформить заказ или он должен быть в master git checkout master
2) Теперь извлеките только один конкретный файл из дочерней ветви в master,
git checkout sub_branch file_path/my_file.ext
здесь sub_branch
означает, где у вас есть этот файл, за которым следует имя файла, которое нужно скопировать.
Обратите внимание, что в принятом ответе первый вариант ставит весь файл из другой ветви (например, git add ...
) и что второй вариант просто приводит к копированию файла, но не вносит изменения (как будто вы только что отредактировали файл вручную и имели выдающиеся различия). Р>