копирование vs git cherry pick
От: B0FEE664  
Дата: 13.12.23 13:55
Оценка:
Есть ли разница между копированием файлов из одной ветки в другую с последующим коммитом и их взятием через git cherry pick ?

Т.е. если я возьму изменённые в одном комите файлы из одной ветки и скопирую эти файлы в другую ветку в которой они никогда не менялись, после чего сделаю коммит, то будет ли видна разница в истории по сравнению с операцией git cherry pick ?
И каждый день — без права на ошибку...
Re: копирование vs git cherry pick
От: Muxa  
Дата: 13.12.23 14:09
Оценка:
Хэш коммита не совпадет насколько я понимаю
Re[2]: копирование vs git cherry pick
От: B0FEE664  
Дата: 13.12.23 14:11
Оценка:
Здравствуйте, Muxa, Вы писали:

M>Хэш коммита не совпадет насколько я понимаю

Хэш коммита не совпадёт с чём?
И каждый день — без права на ошибку...
Re[3]: копирование vs git cherry pick
От: Muxa  
Дата: 13.12.23 14:18
Оценка:
M>>Хэш коммита не совпадет насколько я понимаю
BFE>Хэш коммита не совпадёт с чём?

С хэшем коммита, который ты не черрипикнул.
Ну то есть так, в какой-то ветке уже есть коммит с хэшем.
Вариант 1: черрипикнуть его в свою ветку с тем хэшем
Вариант 2: взять изменения руками и сделать новый коммит с новым хэшем.

Вот эти два хэша и не будут совпадать.
Re[4]: копирование vs git cherry pick
От: B0FEE664  
Дата: 13.12.23 14:39
Оценка:
Здравствуйте, Muxa, Вы писали:

M>>>Хэш коммита не совпадет насколько я понимаю

BFE>>Хэш коммита не совпадёт с чём?

M>С хэшем коммита, который ты не черрипикнул.

M>Ну то есть так, в какой-то ветке уже есть коммит с хэшем.
M>Вариант 1: черрипикнуть его в свою ветку с тем хэшем
M>Вариант 2: взять изменения руками и сделать новый коммит с новым хэшем.
M>Вот эти два хэша и не будут совпадать.

Каждое новое состояние репозитория git — это новый хэш. Так что хэш в любом случае должен быть другой (при любом варианте) или я не понимаю чего-то фундаментального.
И каждый день — без права на ошибку...
Re[4]: копирование vs git cherry pick
От: andrey.desman  
Дата: 13.12.23 15:22
Оценка: 6 (1)
Здравствуйте, Muxa, Вы писали:

M>С хэшем коммита, который ты не черрипикнул.

M>Ну то есть так, в какой-то ветке уже есть коммит с хэшем.
M>Вариант 1: черрипикнуть его в свою ветку с тем хэшем

Он черипикнется с другим хэшем, потому что родительский коммит будет другим. (если ветки не идентичны). А еще он в коммит мессадж добавит текст, что черри пикед.

M>Вариант 2: взять изменения руками и сделать новый коммит с новым хэшем.


M>Вот эти два хэша и не будут совпадать.


Все три не будут совпадать.
Re: копирование vs git cherry pick
От: andrey.desman  
Дата: 13.12.23 15:24
Оценка: 6 (1) +1
Здравствуйте, B0FEE664, Вы писали:

BFE>Т.е. если я возьму изменённые в одном комите файлы из одной ветки и скопирую эти файлы в другую ветку в которой они никогда не менялись, после чего сделаю коммит, то будет ли видна разница в истории по сравнению с операцией git cherry pick ?


Насколько я знаю, меты про черри пик нет, поэтому не будет разницы. Ну, дата и автор может поменяются, но их можно явно указать.
Re[5]: копирование vs git cherry pick
От: Muxa  
Дата: 13.12.23 15:35
Оценка:
AD>Все три не будут совпадать.

А вот этого я не знал
Re: копирование vs git cherry pick
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 14.12.23 14:02
Оценка: +1
Здравствуйте, B0FEE664, Вы писали:

BFE>Есть ли разница между копированием файлов из одной ветки в другую с последующим коммитом и их взятием через git cherry pick ?


BFE>Т.е. если я возьму изменённые в одном комите файлы из одной ветки и скопирую эти файлы в другую ветку в которой они никогда не менялись, после чего сделаю коммит, то будет ли видна разница в истории по сравнению с операцией git cherry pick ?


Черрипик перенакладывает изменения, а не копирует файлы. Если состояние родительских коммитов разное, то и результаты будут разными. Копирование файлов принесёт точную копию из того коммита, откуда копируешь. Черрипик же принесёт только отличия. Которые, кстати, ещё могут и не наложиться, если возникнут конфликты правок.

Пример: пусть в текущем коммите есть файл a.txt с содержимым:
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
jjj

Создаём две параллельные ветки branch-c и branch-g и правим там разные строки:
git checkout -b branch-c
sed -i -e 's/ccc/ccc-1/' a.txt
git add -u
git commit -m'c->c1'

git branch branch-g HEAD^
git checkout branch-g
sed -i -e 's/ggg/ggg-2/' a.txt
git add -u
git commit -m'g->g2'

Теперь если мы черрипикнем коммит из ветки branch-c, то у нас будет файл a.txt, в котором обе строки заменены:
aaa
bbb
ccc-1
ddd
eee
fff
ggg-2
hhh
jjj

Если же мы вместо черрипика скопируем файл из той ветки, то все локальные изменения текущей ветки будут потеряны:
aaa
bbb
ccc-1
ddd
eee
fff
ggg
hhh
jjj


P. S. Сорри, не вчитался и упустил фразу "в которой они никогда не менялись". Если так, то в содержимом разницы быть не должно.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Отредактировано 14.12.2023 16:52 CaptainFlint . Предыдущая версия .
Re: копирование vs git cherry pick
От: rg45 СССР  
Дата: 14.12.23 15:11
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Есть ли разница между копированием файлов из одной ветки в другую с последующим коммитом и их взятием через git cherry pick ?


BFE>Т.е. если я возьму изменённые в одном комите файлы из одной ветки и скопирую эти файлы в другую ветку в которой они никогда не менялись, после чего сделаю коммит, то будет ли видна разница в истории по сравнению с операцией git cherry pick ?


В результате копирования файлов ты получаешь точную копию состояния коммита-источника, тогда как в результате операции cherry pick образуется коммит, содержащий изменения, сделанные в обеих ветках.

P.S. Простейшая иллюстрация: допустим, в ветке назначения были внесены изменения в какой-то файл. Операция cherry-pick никак не затронет этот файл, если в ветке-источнике этот файл не менялся, тогда как операция копирования восстановит этот файл до состояния ветки-источника.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 14.12.2023 15:20 rg45 . Предыдущая версия . Еще …
Отредактировано 14.12.2023 15:18 rg45 . Предыдущая версия .
Отредактировано 14.12.2023 15:17 rg45 . Предыдущая версия .
Re[2]: копирование vs git cherry pick
От: m2user  
Дата: 14.12.23 16:24
Оценка: +1
R>P.S. Простейшая иллюстрация: допустим, в ветке назначения были внесены изменения в какой-то файл. Операция cherry-pick никак не затронет этот файл, если в ветке-источнике этот файл не менялся, тогда как операция копирования восстановит этот файл до состояния ветки-источника.

ТС же пишет, что интересующем его сценарии в целевой ветке файл не менялся. И конфликтов не должно быть.
Т.е. технически разницы никакой, кроме некоторой автоматизации процесса.
Re[3]: копирование vs git cherry pick
От: rg45 СССР  
Дата: 14.12.23 16:55
Оценка:
Здравствуйте, m2user, Вы писали:

M>ТС же пишет, что интересующем его сценарии в целевой ветке файл не менялся. И конфликтов не должно быть.

M>Т.е. технически разницы никакой, кроме некоторой автоматизации процесса.

Да, невнимательно прочитал. И похоже, и саму суть вопроса я уловил не совсем правильно.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 14.12.2023 17:09 rg45 . Предыдущая версия . Еще …
Отредактировано 14.12.2023 17:09 rg45 . Предыдущая версия .
Re: копирование vs git cherry pick
От: vsb Казахстан  
Дата: 14.12.23 18:05
Оценка:
Насколько я понимаю, чирипик берёт diff для указанного коммита и накладывает diff на HEAD (текущий коммит).

В указанной ситуации разницы в истории быть не должно.
Re[2]: копирование vs git cherry pick
От: aik Австралия  
Дата: 15.12.23 00:23
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Насколько я понимаю, чирипик берёт diff для указанного коммита и накладывает diff на HEAD (текущий коммит).

vsb>В указанной ситуации разницы в истории быть не должно.

Так и есть. Небольшая деталь — "git cherry-pick -x" добавит "(cherry picked from commit ...)" в текст коммитлога, но это и руками можно делать.
Re: копирование vs git cherry pick
От: sambl74 Россия  
Дата: 22.01.24 12:46
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Т.е. если я возьму изменённые в одном комите файлы из одной ветки и скопирую эти файлы в другую ветку в которой они никогда не менялись, после чего сделаю коммит, то будет ли видна разница в истории по сравнению с операцией git cherry pick ?


Пример могу такой привести. Есть мастер ветка и стейдж. В стейдж насливали кучу правок и готовятся к пушу в мастер. Но внезапно одна из правок понадобилась в мастере "прям щаз". Если просто переложить файлик нужный в мастер — то потом при мерже туда стейджа будут вопросики, а вот если черрипикнуть в мастер нужную правочку, то при последующем мерже опять же стейджа в мастер вопросиков на это счёт не будет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.