Guía de Git: ¿por qué no puedo encontrar la confirmación que acabo de mencionar (rama libre)?

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

Es mejor dar pequeños pasos que quedarse quieto

escenario del problema

En concreto, existen los siguientes pasos:

  1. 本地提交 commit 未 push
  2. 切换tag 或 分支
  3. 最后无法找到之前的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 reflogvea todos los registros de envío de la rama actual mediante la visualización (el pensamiento inercial se puede usar directamente git logy no se aplica al escenario actual)

inserte la descripción de la imagen aquí

Paso 2: encuentre commitel 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 gitdespuéshash de la operación , todos 唯一los cuales son verdaderos (necesitamos cambiar a cualquier nodo que necesitemos para usar hashel 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

inserte la descripción de la imagen aquí


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

inserte la descripción de la imagen aquí

Se puede ver en la figura que actualmente se encuentra HEAD detached from origin/devdebajo de la sucursal, que es una sucursal libre y es anónima.

solución

  1. Ver enviado en estado libre 最新commit号: ejecutar git reflogel comando o ejecutar git branch -vel 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)

inserte la descripción de la imagen aquí

  1. 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 
  1. Cambiar a la sucursal que se fusionará
git checkout 要合并临时分支的分支名称
//示例: git checkout dev
  1. fusionar rama
git merge temp
  1. eliminar rama temporal
git branch -d temp
  1. Empuje la rama fusionada al almacén remoto
git push origin 分支名称:远程分支名称
//示例: git push origin dev
  1. Al final, no mostraré la imagen, puedes hacerlo directamente en la rama actual通过 log 查看最终结果

Supongo que te gusta

Origin blog.csdn.net/qq_20451879/article/details/130771265
Recomendado
Clasificación