Respuestas:
Eso casi funcionará.
Al pasar a una rama no predeterminada, debe especificar la referencia de origen y la referencia de destino:
git push origin branch1:branch2
O
git push <remote> <branch with new changes>:<branch you are pushing to>
<remote>/<branch>
git push origin :branch2
pensando que simplemente empujaría la rama local actual al control remoto branch2
, que en cambio eliminará el control remoto branch2
! La forma correcta es git push origin HEAD:branch2
.
Ciertamente, aunque solo funcionará si es un avance rápido de BRANCH2 o si lo fuerza. La sintaxis correcta para hacer tal cosa es
git push <remote> <source branch>:<dest branch>
Consulte la descripción de un "refspec" en la página de manual de git push para obtener más detalles sobre cómo funciona. También tenga en cuenta que tanto un empuje forzado como un reinicio son operaciones que "reescriben el historial", y no deben intentarse por un corazón débil a menos que esté absolutamente seguro de saber lo que está haciendo con respecto a los repositorios remotos y otros personas que tienen tenedores / clones del mismo proyecto.
git push --force remote local-branch:remote-branch
.
Es muy simple. Suponga que ha realizado cambios en su Rama A, que reside tanto en el lugar local como en forma remota, pero desea enviar estos cambios a la Rama B, que no existe en ninguna parte.
Paso 01: crea y cambia a la nueva rama B
git checkout -b B
Paso-02: Agregar cambios en la nueva sucursal local
git add. // o archivos específicos
Paso 03: comprometer los cambios
git commit -m "commit_message"
Paso-04: Empuje cambios en la nueva rama B . El siguiente comando creará una nueva rama B de forma remota
origen de empuje git B
Ahora, se puede verificar de bitbucket que la rama B tendrá una más que comprometen la rama A . Y cuando vas a la comprobación de la rama A estos cambios no estarán allí ya que estos han sido empujados a la rama B .
Nota: Si ha confirmado sus cambios en la rama A y luego desea cambiar esos cambios a la nueva rama B , primero deberá restablecerlos. #Feliz aprendizaje
En mi caso, tuve una confirmación local, que no se presionó origin\master
, sino que se comprometió con mi master
sucursal local . Este compromiso local ahora debe ser empujado a otra rama.
Con Git Extensions puedes hacer algo como esto:
También puede hacerlo en la línea de comando GIT . Ejemplo copiado de David Christensen :
Creo que encontrarás que
git cherry-pick
+git reset
es un flujo de trabajo mucho más rápido:Usando su mismo escenario, con "característica" siendo la rama con la confirmación más alta incorrecta, sería mucho más fácil hacer esto:
git checkout master
git cherry-pick feature
git checkout feature
git reset --hard HEAD^
Ahorra bastante trabajo, y es el escenario que
git cherry-pick
fue diseñado para manejar.También notaré que esto funcionará también si no es la confirmación más importante; solo necesita un compromiso para el argumento de selección de cereza, a través de:
git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i ... # whack the specific commit from the history
Obtuve un mal resultado con el git push origin branch1:branch2
comando:
En mi caso, branch2
se elimina y branch1
se ha actualizado con algunos cambios nuevos.
Por lo tanto, si solo desea que los cambios se envíen branch2
desde branch1
, intente los siguientes procedimientos:
branch1
:git add .
branch1
:git commit -m 'comments'
En branch1
:git push origin branch1
En branch2
:git pull origin branch1
Activado branch1
: vuelve al commit anterior.
puedes hacer esto fácilmente
git status
git add .
git commit -m "any commit"
git pull origin (branch name, master in my case)
git push origin current branch(master):branch 2(development)(in which you want to push changes)
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
¿Te has comprometido con BRANCH1 y quieres deshacerte de este compromiso sin perder los cambios? git reset es lo que necesitas. Hacer:
git branch BRANCH2
si quieres que BRANCH2 sea una nueva sucursal. También puede fusionar esto al final con otra rama si lo desea. Si BRANCH2 ya existe, deje este paso fuera.
Entonces hazlo:
git reset --hard HEAD~3
si desea restablecer la confirmación en la rama que ha confirmado. Esto toma los cambios de los últimos tres commits.
Luego haga lo siguiente para llevar los commits restablecidos a BRANCH2
git checkout BRANCH2
Esta fuente fue útil: https://git-scm.com/docs/git-reset#git-reset-Undoacommitmakingitatopicbranch
branch1
ybranch2
necesitan estar en el control remoto? ¿Qué pasa si quieres pasar de localbranch1
a remotoorigin branch2
?