Есть ли разница между копированием файлов из одной ветки в другую с последующим коммитом и их взятием через git cherry pick ?
Т.е. если я возьму изменённые в одном комите файлы из одной ветки и скопирую эти файлы в другую ветку в которой они никогда не менялись, после чего сделаю коммит, то будет ли видна разница в истории по сравнению с операцией git cherry pick ?
M>>Хэш коммита не совпадет насколько я понимаю BFE>Хэш коммита не совпадёт с чём?
С хэшем коммита, который ты не черрипикнул.
Ну то есть так, в какой-то ветке уже есть коммит с хэшем.
Вариант 1: черрипикнуть его в свою ветку с тем хэшем
Вариант 2: взять изменения руками и сделать новый коммит с новым хэшем.
Здравствуйте, Muxa, Вы писали:
M>>>Хэш коммита не совпадет насколько я понимаю BFE>>Хэш коммита не совпадёт с чём?
M>С хэшем коммита, который ты не черрипикнул. M>Ну то есть так, в какой-то ветке уже есть коммит с хэшем. M>Вариант 1: черрипикнуть его в свою ветку с тем хэшем M>Вариант 2: взять изменения руками и сделать новый коммит с новым хэшем. M>Вот эти два хэша и не будут совпадать.
Каждое новое состояние репозитория git — это новый хэш. Так что хэш в любом случае должен быть другой (при любом варианте) или я не понимаю чего-то фундаментального.
Здравствуйте, Muxa, Вы писали:
M>С хэшем коммита, который ты не черрипикнул. M>Ну то есть так, в какой-то ветке уже есть коммит с хэшем. M>Вариант 1: черрипикнуть его в свою ветку с тем хэшем
Он черипикнется с другим хэшем, потому что родительский коммит будет другим. (если ветки не идентичны). А еще он в коммит мессадж добавит текст, что черри пикед.
M>Вариант 2: взять изменения руками и сделать новый коммит с новым хэшем.
M>Вот эти два хэша и не будут совпадать.
Здравствуйте, B0FEE664, Вы писали:
BFE>Т.е. если я возьму изменённые в одном комите файлы из одной ветки и скопирую эти файлы в другую ветку в которой они никогда не менялись, после чего сделаю коммит, то будет ли видна разница в истории по сравнению с операцией git cherry pick ?
Насколько я знаю, меты про черри пик нет, поэтому не будет разницы. Ну, дата и автор может поменяются, но их можно явно указать.
Здравствуйте, B0FEE664, Вы писали:
BFE>Есть ли разница между копированием файлов из одной ветки в другую с последующим коммитом и их взятием через git cherry pick ?
BFE>Т.е. если я возьму изменённые в одном комите файлы из одной ветки и скопирую эти файлы в другую ветку в которой они никогда не менялись, после чего сделаю коммит, то будет ли видна разница в истории по сравнению с операцией git cherry pick ?
Черрипик перенакладывает изменения, а не копирует файлы. Если состояние родительских коммитов разное, то и результаты будут разными. Копирование файлов принесёт точную копию из того коммита, откуда копируешь. Черрипик же принесёт только отличия. Которые, кстати, ещё могут и не наложиться, если возникнут конфликты правок.
Пример: пусть в текущем коммите есть файл a.txt с содержимым:
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
jjj
Создаём две параллельные ветки branch-c и branch-g и правим там разные строки:
Здравствуйте, B0FEE664, Вы писали:
BFE>Есть ли разница между копированием файлов из одной ветки в другую с последующим коммитом и их взятием через git cherry pick ?
BFE>Т.е. если я возьму изменённые в одном комите файлы из одной ветки и скопирую эти файлы в другую ветку в которой они никогда не менялись, после чего сделаю коммит, то будет ли видна разница в истории по сравнению с операцией git cherry pick ?
В результате копирования файлов ты получаешь точную копию состояния коммита-источника, тогда как в результате операции cherry pick образуется коммит, содержащий изменения, сделанные в обеих ветках.
P.S. Простейшая иллюстрация: допустим, в ветке назначения были внесены изменения в какой-то файл. Операция cherry-pick никак не затронет этот файл, если в ветке-источнике этот файл не менялся, тогда как операция копирования восстановит этот файл до состояния ветки-источника.
--
Не можешь достичь желаемого — пожелай достигнутого.
R>P.S. Простейшая иллюстрация: допустим, в ветке назначения были внесены изменения в какой-то файл. Операция cherry-pick никак не затронет этот файл, если в ветке-источнике этот файл не менялся, тогда как операция копирования восстановит этот файл до состояния ветки-источника.
ТС же пишет, что интересующем его сценарии в целевой ветке файл не менялся. И конфликтов не должно быть.
Т.е. технически разницы никакой, кроме некоторой автоматизации процесса.
Здравствуйте, m2user, Вы писали:
M>ТС же пишет, что интересующем его сценарии в целевой ветке файл не менялся. И конфликтов не должно быть. M>Т.е. технически разницы никакой, кроме некоторой автоматизации процесса.
Да, невнимательно прочитал. И похоже, и саму суть вопроса я уловил не совсем правильно.
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, vsb, Вы писали:
vsb>Насколько я понимаю, чирипик берёт diff для указанного коммита и накладывает diff на HEAD (текущий коммит). vsb>В указанной ситуации разницы в истории быть не должно.
Так и есть. Небольшая деталь — "git cherry-pick -x" добавит "(cherry picked from commit ...)" в текст коммитлога, но это и руками можно делать.
Здравствуйте, B0FEE664, Вы писали:
BFE>Т.е. если я возьму изменённые в одном комите файлы из одной ветки и скопирую эти файлы в другую ветку в которой они никогда не менялись, после чего сделаю коммит, то будет ли видна разница в истории по сравнению с операцией git cherry pick ?
Пример могу такой привести. Есть мастер ветка и стейдж. В стейдж насливали кучу правок и готовятся к пушу в мастер. Но внезапно одна из правок понадобилась в мастере "прям щаз". Если просто переложить файлик нужный в мастер — то потом при мерже туда стейджа будут вопросики, а вот если черрипикнуть в мастер нужную правочку, то при последующем мерже опять же стейджа в мастер вопросиков на это счёт не будет.