Нажмите фиксации на другую ветку

Можно ли зафиксировать и переместить изменения из одной ветки в другую.

Предположим, что я совершил изменения в BRANCH1 и хочу нажать их на BRANCH2.

От BRANCH1, действительно ли это сделать:

git push origin **BRANCH2**

И затем reset BRANCH1?

Ответ 1

Это почти сработает.

При нажатии на ветку, отличной от используемой по умолчанию, вам необходимо указать ссылку источника и целевую ссылку ref:

git push origin branch1:branch2

или

git push <remote> <branch with new changes>:<branch you are pushing to> 

Ответ 2

Конечно, хотя он будет работать только в том случае, если он быстро перейдет в BRANCH2 или если вы его заставите. Правильный синтаксис для выполнения такой задачи -

git push <remote> <source branch>:<dest branch> 

Подробнее о том, как это работает, см. описание "refspec" на странице git push man. Также обратите внимание, что как силовое нажатие, так и reset - это операции, которые "переписывают историю" и не должны пытаться слабонервным, если вы не уверены, что знаете, что делаете в отношении любых удаленных репозиториев и другие люди, у которых есть вилки/клоны того же проекта.

Ответ 3

Это очень просто. Предположим, что вы внесли изменения в свой филиал A, который находится как в локальном, так и в удаленном месте, но вы хотите перенести эти изменения в филиал B, который нигде не существует.

Шаг-01: создать и переключиться на новую ветку B

Git Checkout -b B

Шаг 02: добавьте изменения в новую локальную ветку

мерзавец добавить. // или определенный файл (ы)

Шаг 03: зафиксируйте изменения

git commit -m "commit_message"

Шаг-04: Нажмите изменения в новую ветвь B. Приведенная ниже команда создаст новую ветку B, а также удаленно

git push origin B

Теперь вы можете проверить из bitbucket, что у ветки B будет еще один коммит, чем у ветки A. И когда вы извлечете ветку A, этих изменений не будет, поскольку они были перенесены в ветку B.

Примечание. Если вы зафиксировали свои изменения в ветки A и после этого хотите перенести эти изменения в новую ветку B, вам придется сначала сбросить эти изменения. #HappyLearning

Ответ 4

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

С помощью Git Extensions вы можете сделать что-то вроде этого:

  • (Создайте, если не существует и) извлеките новую ветку, в которую вы хотите отправить свой коммит.
  • Выберите коммит из истории, который должен быть зафиксирован и перенесен в эту ветку.
  • Щелкните правой кнопкой мыши и выберите Cherry pick commit.
  • Затем нажмите кнопку выбора Cherry.
  • Выбранный коммит будет применен к вашей проверенной ветке. Теперь совершите и нажмите его.
  • Проверьте свою старую ветку с ошибочным коммитом.
  • Сделайте полный сброс этой ветки до второго последнего коммита, где все было в порядке (знайте, что вы здесь делаете!). Вы можете сделать это, щелкнув правой кнопкой мыши на втором последнем коммите и выбрав "Сбросить текущую ветку". Подтвердите операцию, если знаете, что делаете.

Вы также можете сделать это в командной строке GIT. Пример скопирован с Дэвида Кристенсена:

Я думаю, вы найдете git cherry-pick + git reset гораздо более быстрым рабочим процессом:

Используя тот же сценарий, когда ветвь "feature" представляет собой ветвь с некорректным верхним коммитом, сделать это будет намного проще:

git checkout master
git cherry-pick feature
git checkout feature
git reset --hard HEAD^

Сохраняет немало работы, и это сценарий, который git cherry-pick был разработан для обработки.

Я также отмечу, что это будет работать, если это не самый верхний коммит; вам просто нужен коммит для аргумента cherry-pick через:

git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i... # whack the specific commit from the history

Ответ 5

Я получаю плохой результат с помощью команды git push origin branch1:branch2:

В моем случае branch2 был удален, а branch1 обновлен новыми изменениями.

Таким образом, если вы хотите, чтобы изменения только branch2 на branch2 из branch1, попробуйте эти процедуры:

  • На branch1: git add.
  • На branch1: git commit -m 'comments'
  • На branch1: git push origin branch1

  • На branch2: git pull origin branch1

  • На branch1: вернуться к предыдущему branch1.

Ответ 6

Вы взяли на себя обязательство BRANCH1 и хотите избавиться от этого коммита, не теряя изменений? git reset - это то, что вам нужно. Делать:

git branch BRANCH2

если вы хотите, чтобы BRANCH2 была новой веткой. Вы также можете объединить это в конце с другой веткой, если хотите. Если BRANCH2 уже существует, оставьте этот шаг.

Затем сделайте:

git reset --hard HEAD~3

если вы хотите сбросить коммит на ветке, которую вы зафиксировали. Это принимает изменения последних трех коммитов.

Затем выполните следующие действия, чтобы перенести сброшенные коммиты в BRANCH2.

git checkout BRANCH2

Этот источник был полезен: https://git-scm.com/docs/git-reset#git-reset-Undoacommitmakingitatopicbranch