Ответы:
Это почти сработает.
При переходе на ветку не по умолчанию, вам нужно указать исходную ссылку и целевую ссылку:
git push origin branch1:branch2
Или
git push <remote> <branch with new changes>:<branch you are pushing to>
<remote>/<branch>
git push origin :branch2
виду, что любой соблазн (как и я) запускается, думая, что он просто подтолкнет текущую локальную ветвь к удаленному branch2
, а вместо этого удалит удаленный branch2
! Правильный путь есть git push origin HEAD:branch2
.
Конечно, хотя это будет работать только в том случае, если это быстрый переход BRANCH2 или если вы форсируете его. Правильный синтаксис для такой вещи
git push <remote> <source branch>:<dest branch>
Смотрите описание "refspec" на странице руководства git push для более подробной информации о том, как это работает. Также обратите внимание, что принудительное нажатие и сброс являются операциями, которые «переписывают историю», и их не следует делать слабым сердцем, если вы не абсолютно уверены, что знаете, что делаете в отношении любых удаленных репозиториев и других люди, у которых есть вилки / клоны одного и того же проекта.
git push --force remote local-branch:remote-branch
.
Это очень просто Предположим, что вы внесли изменения в свой филиал A, который находится как в локальном, так и в удаленном месте, но вы хотите перенести эти изменения в филиал B, который нигде не существует.
Шаг-01: создать и переключиться на новую ветку B
git checkout -b B
Шаг 02: добавьте изменения в новую локальную ветку
мерзавец добавить. // или определенный файл (ы)
Шаг 03: зафиксируйте изменения
git commit -m "commit_message"
Шаг 04: Нажмите изменения в новой ветви B . Приведенная ниже команда создаст новую ветку B, а также удаленно
git push origin B
Теперь вы можете проверить из BitBucket , что ветвь B будет иметь один более чем совершать ветви А . И когда вы извлекаете филиальную А эти изменения не будут там , как они были вытеснены в ветви 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
от branch1
, попробуйте следующие процедуры:
branch1
:git add .
branch1
:git commit -m 'comments'
На branch1
:git push origin branch1
На branch2
:git pull origin branch1
On branch1
: вернуться к предыдущему коммиту.
git init
#git remote remove origin
git remote add origin <http://...git>
echo "This is for demo" >> README.md
git add README.md
git commit -m "Initail Commit"
git checkout -b branch1
git branch --list
****add files***
git add -A
git status
git commit -m "Initial - branch1"
git push --set-upstream origin branch1
#git push origin --delete branch1
#git branch --unset-upstream
Вы взяли на себя обязательство 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
branch1
и другоеbranch2
на пульте? Что если вы хотите перейти с локальногоbranch1
на удаленныйorigin branch2
?