Подтвердить что ты не робот

Нажмите фиксацию в двух ветвях с помощью Git

как я могу нажать фиксацию в двух ветвях?

Я не могу использовать "git push", потому что тогда он нажимает на три ветки, и я просто хочу совершить в двух из них.

Ive попробовал "git merge HEAD -commit id из ветки A--" в ветке B, но затем он берет все из ветки A и сливается с веткой B. Мне просто нужен последний коммит, а не все остальное сливается с ветвью B.

Кто-нибудь знает, что делать?

4b9b3361

Ответ 1

Короткий ответ

Вы можете применить уже существующую фиксацию к другому ветки, используя команду cherry-pick, а затем нажмите обе ветки с помощью git push origin branchA branchB.


Почему нажатие фиксации в двух ветвях может быть полезно

Предположим, что у вас есть репозиторий с этой структурой:

A--B--C--D  ← master ← HEAD
      \--E  ← v1-release

После того, как был выпущен проект (завершен A, B, C) и была создана ветвь v1-release (так что v1 может поддерживаться с исправлениями, а следующая версия может быть разработана в master), Commit E использовался для указания информации о версии (добавлены примечания к выпуску и т.д.). Commit D представил новую функцию, которая запланирована для следующей версии и не должна появляться в v1-release.

Теперь, если ошибка обнаружена в v1-release, она должна быть исправлена ​​в обеих ветвях, чтобы пользователи могли продолжать использовать v1, и она не отображается в следующей версии.

После исправления ошибки в master репозиторий должен выглядеть следующим образом:

A--B--C--D--F  ← master ← HEAD
      \--E     ← v1-release

Теперь commit F с исправлением ошибки следует применить к ветки v1-release.

Как это сделать

Конец не может быть точно скопирован (поскольку commit является статусом сохранения каталога), но вы можете применить изменения, сделанные в фиксации к другому фиксации.

cherry-pick команда выполняет именно это. Он применяет изменения, сделанные указанной фиксацией к текущей ветке, создавая новую фиксацию:

git checkout v1-release
git cherry-pick F

После этого репозиторий должен выглядеть следующим образом:

A--B--C--D--F  ← master
      \--E--G  ← v1-release ← HEAD

Commit G вводит те же изменения, что и F.

Возможно, вам придется разрешать конфликты (точно так же, как после слияния).

Сообщение об ошибке

Предыдущий вишневый выбор теперь пуст...

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

В случае ошибок или конфликтов вишня-выбор может быть прервана с помощью git cherry-pick --abort.

Наконец, вы можете вернуться в ветвь master и нажать обе ветки в удаленный репозиторий:

git checkout master
git push origin master v1-release

Окончательная структура репозитория:

A--B--C--D--F  ← master ← HEAD
      \--E--G  ← v1-release

Ответ 2

Попробуйте следующее:

git push origin <commitId>:<brancnName_1>
git push origin <commitId>:<brancnName_2>

Он работает на моей стороне.