Раздел вопрос-ответ git как перенести коммит из одной ветки в другую?

Как в git перенести коммит из одной ветки в другую?

Нужно перенести только изменения, которые затрагивает конкретный коммит, а не все изменения ветки.

Такая необходимость возникла, когда я отпочковался не от ветки master, а от другой ветки (по ошибке). Затем сделал пару коммитов. Как можно перенести эти пару коммитов в новую ветку, чтобы создать новый ПР относительно мастер? Чтобы 2 независимых ПР получилось? 

 
share

1 ответ

git cherry-pick — применение к дереву проекта изменений, внесенных определённым коммитом.

git cherry-pick <hash коммита> — найдёт коммит по его хэшу и вольёт его в текущую ветку. Применятся изменения только конкретного коммита, причём изменения сразу же будут проиндексированы и будет создан новый коммит в активной ветке с таким же именем, как коммит и назывался. При наличии конфиликтных изменений, нужно будет решить конфликты, как и при "рядном" merge.

Если вам нужно перенести изменения в ветку из определённого коммита другой ветки так, чтобы коммит автоматически не создавался, то нужно использовать параметр -n (--no-commit). Пример:

git cherry-pick -n d3edb354cd3c080b28d13dcb92448de81e543297

Все поддериживаемые параметры cherry-pick:

$ git cherry-pick 
использование: git cherry-pick [options] <commit-ish>...
   или: git cherry-pick <subcommand>
 
    --quit                end revert or cherry-pick sequence
    --continue            resume revert or cherry-pick sequence
    --abort               cancel revert or cherry-pick sequence
    -n, --no-commit       don't automatically commit
    -e, --edit            edit the commit message
    -s, --signoff         add Signed-off-by:
    -m, --mainline <n>    parent number
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --strategy <strategy>
                          merge strategy
    -X, --strategy-option <option>
                          option for merge strategy
    -x                    append commit name
    --ff                  allow fast-forward
    --allow-empty         preserve initially empty commits
    --allow-empty-message
                          allow commits with empty messages
    --keep-redundant-commits
                          keep redundant, empty commits
Добавить комментарий
    как минимум 5 символов

    icon Вход в систему

    зарегистрироваться