Esto es lo que uso a menudo:
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
Tenga en cuenta que es una buena práctica de no hacer cambios a su maestro local / desarrollar rama, pero en lugar de pagar a otra rama para cualquier cambio, con el nombre de la sucursal antepuesto por el tipo de cambio, por ejemplo feat/
, chore/
, fix/
, etc. De esta manera sólo se necesitan tire de los cambios, no empuje ningún cambio desde el maestro. Lo mismo para otras ramas a las que otros contribuyen. Por lo tanto, lo anterior solo debe usarse si ha cometido cambios en una rama a la que otros se han comprometido y necesita restablecerse. De lo contrario, en el futuro, evite presionar a una rama a la que otros presionan, en lugar de pagar y enviar a dicha rama a través de la rama desprotegida.
Si desea restablecer su sucursal local a la última confirmación en la rama ascendente, lo que funciona para mí hasta ahora es:
Verifique sus controles remotos, asegúrese de que su origen y origen sean lo que espera, si no es como se esperaba, use git remote add upstream <insert URL>
, por ejemplo, el repositorio original de GitHub del que bifurcó, y / o git remote add origin <insert URL of the forked GitHub repo>
.
git remote --verbose
git checkout develop;
git commit -m "Saving work.";
git branch saved-work;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force
En GitHub, también puede pagar la rama con el mismo nombre que la local, para guardar el trabajo allí, aunque esto no es necesario si el desarrollo de origen tiene los mismos cambios que la rama local de trabajo guardado. Estoy usando la rama de desarrollo como ejemplo, pero puede ser cualquier nombre de rama existente.
git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop
Luego, si necesita fusionar estos cambios con otra rama mientras existen conflictos, preservando los cambios en el desarrollo, use:
git merge -s recursive -X theirs develop
Mientras uso
git merge -s recursive -X ours develop
para preservar los cambios conflictivos de branch_name. De lo contrario, use una herramienta de combinación con git mergetool
.
Con todos los cambios juntos:
git commit -m "Saving work.";
git branch saved-work;
git checkout develop;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
git add .;
git commit -m "Reset to upstream/develop";
git push --force origin develop;
git checkout branch_name;
git merge develop;
Tenga en cuenta que en lugar de upstream / desarrollo, podría usar un hash de confirmación, otro nombre de rama, etc. Use una herramienta CLI como Oh My Zsh para verificar que su rama sea verde, lo que indica que no hay nada que confirmar y que el directorio de trabajo está limpio ( que es confirmado o también verificable por git status
). Tenga en cuenta que esto puede agregar realmente compromete en comparación a aguas arriba a desarrollar si hay algo añadido automáticamente por un commit, por ejemplo, diagramas UML, cabeceras de licencia, etc., por lo que en ese caso, se podría entonces tirar de los cambios en la origin develop
que upstream develop
, si es necesario.
git status
su segundo comandogit reset --hard HEAD
falló. Sin embargo, no pegaste su salida. → Pregunta incompleta.