Можно ли зафиксировать и переместить изменения из одной ветки в другую.
Предположим, что я совершил изменения в BRANCH1 и хочу нажать их на BRANCH2.
От BRANCH1, действительно ли это сделать:
git push origin **BRANCH2**
И затем reset BRANCH1?
Можно ли зафиксировать и переместить изменения из одной ветки в другую.
Предположим, что я совершил изменения в BRANCH1 и хочу нажать их на BRANCH2.
От BRANCH1, действительно ли это сделать:
git push origin **BRANCH2**
И затем reset BRANCH1?
Это почти сработает.
При нажатии на ветку, отличной от используемой по умолчанию, вам необходимо указать ссылку источника и целевую ссылку ref:
git push origin branch1:branch2
или
git push <remote> <branch with new changes>:<branch you are pushing to>
Конечно, хотя он будет работать только в том случае, если он быстро перейдет в BRANCH2 или если вы его заставите. Правильный синтаксис для выполнения такой задачи -
git push <remote> <source branch>:<dest branch>
Подробнее о том, как это работает, см. описание "refspec" на странице git push man. Также обратите внимание, что как силовое нажатие, так и reset - это операции, которые "переписывают историю" и не должны пытаться слабонервным, если вы не уверены, что знаете, что делаете в отношении любых удаленных репозиториев и другие люди, у которых есть вилки/клоны того же проекта.
Это очень просто. Предположим, что вы внесли изменения в свой филиал 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
В моем случае у меня был один локальный коммит, который не был перенесен в origin\master
, а зафиксирован в моей локальной ветке master
. Этот локальный коммит теперь должен быть перенесен в другую ветку.
С помощью Git Extensions вы можете сделать что-то вроде этого:
Вы также можете сделать это в командной строке 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
Я получаю плохой результат с помощью команды 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
.
Вы взяли на себя обязательство 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