rama - git push origin master
Error: No se puede extraer con rebase: tiene cambios sin registrar (7)
Empecé a colaborar con algunos amigos en un proyecto y usan el repositorio heroku git.
Cloné el repositorio hace unos días y desde entonces han hecho algunos cambios, así que estoy tratando de obtener las últimas actualizaciones
git pull --rebase
comando git pull --rebase
como se indica aquí (¿Es esta la manera correcta de hacerlo?): https://devcenter.heroku.com/articles/sharing#merging-code-changes
Obtuve el siguiente error:
$ git pull --rebase
Cannot pull with rebase: You have unstaged changes.
Please commit or stash them.
Supongo que me equivoqué con el código y ahora quiere que yo lo comprometa o lo descarte (¿eso es lo que significa esconder?) Los cambios. ¿Esto es lo que está pasando? Si este es el caso, me gustaría descartar cualquier cambio que pudiera haber hecho y obtener el código actualizado del repositorio de git.
¿Alguna idea de lo que puedo hacer?
Cuando el cambio fuera de escena se debe a que git está intentando arreglar las convenciones de eol en un archivo (como es siempre mi caso), ninguna cantidad de almacenamiento, extracción o reinicio lo hará desaparecer.
Sin embargo, si la intención es realmente rebasear e ignorar el cambio sin registrar, entonces lo que hago es eliminar la rama localmente y luego verificarla nuevamente.
git checkout -f anyotherbranchthanthisone
git branch -D thebranchineedtorebase
git checkout thebranchineedtorebase
Voila! No me ha fallado todavía.
Do git status
, esto te mostrará qué archivos han cambiado. Como usted indicó que no desea mantener los cambios, puede hacer que git checkout -- <file name>
o git reset --hard
para deshacerse de los cambios.
En su mayor parte, git te dirá qué hacer con respecto a los cambios. Por ejemplo, su mensaje de error le dice a git stash
sus cambios. Esto sería si quisieras conservarlos. Después de tirar, entonces harías git stash pop
y tus cambios se volverían a aplicar.
git status
también tiene cómo deshacerse de los cambios dependiendo de si el archivo está configurado para cometer o no.
Esto funciona para mí:
git fetch
git rebase --autostash FETCH_HEAD
Primero comienza con un git status
Vea si tiene algún cambio pendiente. Para descartarlos, ejecuta
git reset --hard
Si desea mantener sus cambios de trabajo mientras realiza una rebase, puede usar --autostash
. De la documentation :
Antes de comenzar la rebase, guarde las modificaciones locales (ver git-stash[1] ) si es necesario, y aplique el alijo cuando termine.
Por ejemplo:
git pull --rebase --autostash
Siempre puedes hacer
git fetch && git merge --ff-only origin/master
y obtendrás (a) ningún cambio si tienes cambios no confirmados que entran en conflicto con los cambios en sentido ascendente o (b) el mismo efecto que esconder / tirar / aplicar: una rebase para ponerte sobre los últimos cambios de HEAD y tus cambios no confirmados como es.
Tirando con rebase es una buena práctica en general.
Sin embargo, no puede hacer eso si su índice no está limpio, es decir, ha realizado cambios que no se han confirmado.
Puede hacer esto para evitar el problema, suponiendo que desea mantener sus cambios:
- esconde tus cambios con:
git stash
- extraer de master con rebase
- vuelve a aplicar los cambios que guardaste en (1) con:
git stash apply stash@{0}
o el más simplegit stash pop