Cuando usé git una vez, después de enviar la confirmación, no presioné y luego corté directamente a una determinada etiqueta de la rama actual.Finalmente, cuando quise volver atrás, no pude encontrar el nodo donde acabo de enviar el compromiso...
Artículos relacionados
- Guía de Git: los conocimientos básicos y la primera configuración que debe dominar
- Guía de Git: esos comandos básicos que se usan todos los días en el combate real del proyecto
- Guía de Git - Demuestra que eres un genio usando Git correctamente
- Git Guide: esos proyectos de escenarios de combate reales que a menudo encuentro
- Combate del proyecto Git: los problemas de Git que encontré se resuelven de esta manera
- Guía de Git: ¿por qué no puedo encontrar la confirmación que acabo de mencionar (rama libre)?
Es mejor dar pequeños pasos que quedarse quieto
escenario del problema
En concreto, existen los siguientes pasos:
本地提交 commit 未 push
切换tag 或 分支
最后无法找到之前的commit节点,导致切不回最新的代码
solución
En mi opinión, esta solución pertenece a la curva para salvar el país, si hay una mejor en el futuro, debería agregarla nuevamente.
Paso 1: git reflog
vea todos los registros de envío de la rama actual mediante la visualización (el pensamiento inercial se puede usar directamente git log
y no se aplica al escenario actual)
Paso 2: encuentre commit
el registro, que básicamente resuelve la mitad del problema; luego, cree una nueva rama y revierta el código
- El área marcada es el valor
git
despuéshash
de la operación , todos唯一
los cuales son verdaderos (necesitamos cambiar a cualquier nodo que necesitemos para usarhash
el valor del nodo correspondiente) - Cree una nueva rama temporal para almacenar el último código del último nodo
新建临时分支(一般会直接切换新建的分支)
git checkout -b "tmpLiu"
justo en la sucursal temporalgit reset --hard 最新commit hash值
git reset --hard e795...
Paso 3: Vuelva a la rama anterior y fusione la rama temporal (después de completar la fusión, la rama temporal se puede eliminar)
cambiar de rama
git checkout 之前分支
fusionar rama
git merge tmpLiu
Hint:下方的游离分支同该处的解决方式基本相同,只是多了一些示例,有不懂的话也可以去看看
solución final
rama libre
Durante y después de resolver el problema, descubrí que esta operación implica cierto conocimiento relevante de la rama libre; el
puntero principal está en un estado libre, y es necesario crear una rama y luego fusionarla con la rama maestra, y finalmente eliminar la rama temporal rama. .
El escenario encontrado por otros es ligeramente diferente al mío. Se informa un error al enviar el código git push xxx xxx
, pero la solución es la misma, de la siguiente manera
git push origin dev
, error:error: src refspec dev does not match any
Se puede ver en la figura que actualmente se encuentra HEAD detached from origin/dev
debajo de la sucursal, que es una sucursal libre y es anónima.
solución
- Ver enviado en estado libre
最新commit号
: ejecutargit reflog
el comando o ejecutargit branch -v
el comando, ya sea
git reflog
git branch -v
Puede ver que el último número de confirmación es: 8708fbb ( 如果自我感觉 git branch -v 显示不全的话,可以直接用 git reflog
)
- Cree una rama temporal, cambie a la rama después de que se complete la creación y compruébelo
git branch temp 最新的commit号
//示例: git branch temp 8708fbb
- Cambiar a la sucursal que se fusionará
git checkout 要合并临时分支的分支名称
//示例: git checkout dev
- fusionar rama
git merge temp
- eliminar rama temporal
git branch -d temp
- Empuje la rama fusionada al almacén remoto
git push origin 分支名称:远程分支名称
//示例: git push origin dev
- Al final, no mostraré la imagen, puedes hacerlo directamente en la rama actual
通过 log 查看最终结果