Как перенести изменения файла из коммита одной ветки в коммит другой ветки?
Обычно пользуюсь консолью, но для такого случая скачал gitkraken и не нашел там подобного функционала.
Есть ветка feature/aaa, в которой есть коммит 111, в котором есть изменения в некотором файле
Есть ветка feature/bbb, в которой есть коммит 222
Как мне перетащить эти изменения ФАЙЛА из коммита 111 в коммит 222?
(я ожидал, что я открою интерфейс гиткракена и буквально драг-н-дропом перетащу изменения в другой коммит)
git cherry-pick
Команда git cherry-pick используется для того чтобы взять изменения, внесённые каким-либо коммитом, и попытаться применить их заново в виде нового коммита наверху текущей ветки. Это может оказаться полезным чтобы забрать парочку коммитов из другой ветки без полного слияния с той веткой.
В консоли вы наверное переносите не изменения, а целиком всё состояние файла через git checkout -- file или git reset -- file.
Действительно, в GitKraken такой операции не видно. А вот в бесплатном SmartGit без проблем, любое состояние любого файла можно мышкой сохранить в рабочий каталог.
Но если надо не весь файл перенести а только некоторые изменения его, то VS Code прекрасно справляется.
Делаем там сравнение двух состояний и забираем нужные правки.
Нет в гите прямого инструмента для таких вещей. Это очень странная задача)
Поэтому просто зайдите в другую ветку, скопируйте изменения, вставьте в нужную. Если надо, чтоб прям один коммит был, то вы:
1 -- коммитите перенесённые изменения
2 -- rebase -i
3 -- squash-ите последний коммит с перенесёнными изменениями (создаст новый коммит на основе двух объединённых старых)
Будет работать, только если коммит 222 у вас в ветке последний
Столкнулся с такой проблемой.
Нужно было перенести половину файлов из одного MR в другой MR.
Нашел очень простое решение.
1. Объединил все коммиты в ветке branch1
2. Сделал патч из комита в этой ветке.
3. Создал ветку branch2 из master.
4. Применил патч через IDE,(там можно выбрать какие файлы применять, а какие не применять).
5. Создал новый комит и отправил в repo.