origin - git pull remote branch
Git pull despuĆ©s de actualizaciĆ³n forzada (2)
Esto no solucionará las ramas que ya tienen el código que no desea en ellas (vea a continuación cómo hacerlo), pero si hubieran retirado alguna rama y ahora quisieran que estuviera limpio (y no "adelante" de origen / alguna rama) entonces simplemente:
git checkout some-branch # where some-branch can be replaced by any other branch
git branch base-branch -D # where base-branch is the one with the squashed commits
git checkout -b base-branch origin/base-branch # recreating branch with correct commits
Nota: Puedes combinar estos todos poniendo && entre ellos.
Nota 2: Florian mencionó esto en un comentario, pero ¿quién lee los comentarios cuando busca respuestas?
Nota 3: Si tiene ramas contaminadas, puede crear otras nuevas basadas en la nueva "rama tonta" y solo tiene que elegir.
Ex:
git checkout feature-old # some branch with the extra commits
git log # gives commits (write down the id of the ones you want)
git checkout base-branch # after you have already cleaned your local copy of it as above
git checkout -b feature-new # make a new branch for your feature
git cherry-pick asdfasd # where asdfasd is one of the commit ids you want
# repeat previous step for each commit id
git branch feature-old -D # delete the old branch
¡Ahora la característica nueva es tu rama sin los compromisos adicionales (posiblemente malos)!
Acabo de aplastar algunos compromisos con git rebase
e hice un git push --force
(que es malo, lo sé).
Ahora los otros ingenieros de software tienen una historia diferente y cuando hacen un git pull
, Git se fusionará. ¿Hay una manera de solucionar esto, excepto haciendo un rm my-repo; git clone [email protected]:my-repo.git
rm my-repo; git clone [email protected]:my-repo.git
?
Necesito algo como lo contrario de git push --force
, pero git pull --force
no dio los resultados esperados.
Para recibir los nuevos compromisos.
git fetch
Reiniciar
Puede restablecer la confirmación para una rama local utilizando git reset
.
Para cambiar el commit de una sucursal local:
git reset origin/master --hard
Tenga cuidado, sin embargo, como lo indica la documentación:
Restablece el índice y el árbol de trabajo. Cualquier cambio a los archivos rastreados en el árbol de trabajo desde <commit> se descartan.
Si realmente quieres mantener los cambios que tienes localmente, haz un --soft
reset en su lugar. Lo que actualizará el historial de confirmación para la rama, pero no cambiará ningún archivo en el directorio de trabajo (y luego puede confirmarlos).
Rebase
Puede reproducir sus confirmaciones locales sobre cualquier otra confirmación / rama usando git rebase
:
git rebase -i origin/master
Esto invocará el rebase en el modo interactivo, en el que puede elegir cómo aplicar cada confirmación individual que no se encuentra en el historial al que se está basando.
Si las confirmaciones que eliminó (con git push -f
) ya se incluyeron en el historial local, aparecerán en la lista como confirmaciones que se volverán a aplicar. Deberían eliminarse como parte de la rebase o simplemente se volverán a presentar. incluido en el historial de la rama - y reaparece en el historial remoto en el próximo impulso.
Use el git command --help
help git command --help
para obtener más detalles y ejemplos sobre cualquiera de los comandos anteriores (u otros).