origin example ejemplo git github git-pull git-fetch

example - Intentar extraer archivos de mi repositorio de Github: "negarse a fusionar historias no relacionadas"



git pull origin master (7)

Cuando usé --allow-unrelated-histories , este comando generó demasiados conflictos. Hubo conflictos en los archivos en los que ni siquiera trabajé. Para superar el error " Refusing to merge unrelated histories" , utilicé el siguiente comando de rebase:

git pull --rebase=preserve --allow-unrelated-histories

Después de esto, confirme los cambios no confirmados con un mensaje de confirmación. Finalmente, ejecute el siguiente comando:

git rebase --continue

Después de esto, mi copia de trabajo estaba actualizada con la copia remota y pude impulsar mis cambios como antes. No más errores de historias no relacionadas al tirar.

Estoy aprendiendo git y sigo el libro de la comunidad Git.

Anteriormente (hace mucho tiempo) hice un repositorio público en Github, con algunos archivos. Ahora configuré un repositorio local de Git en mi computadora actual y comprometí algunos archivos. Luego agregué un control remoto apuntando a mi página de Github:

[root@osboxes c]# git remote add learnc https://github.com/michaelklachko/Learning-C

Eso pareció tener éxito:

[root@osboxes c]# git remote show learnc * remote learnc Fetch URL: https://github.com/michaelklachko/Learning-C Push URL: https://github.com/michaelklachko/Learning-C HEAD branch: master Remote branch: master tracked Local ref configured for ''git push'': master pushes to master (local out of date)

Ahora quiero descargar los archivos de mi repositorio de Github a mi computadora. Hice esto:

[root@osboxes c]# git fetch learnc [root@osboxes c]# git merge learnc/master warning: refname ''learnc/master'' is ambiguous. Already up-to-date.

Sin embargo, no veo ningún archivo nuevo en mi directorio local. ¿Cómo puedo conseguirlos?

También intenté hacer esto:

[root@osboxes c]# git pull learnc master From https://github.com/michaelklachko/Learning-C * branch master -> FETCH_HEAD fatal: refusing to merge unrelated histories

Por cierto, localmente estoy en la rama maestra (no hay otras ramas):

[root@osboxes c]# git status On branch master nothing to commit, working directory clean


Ejecute el siguiente comando:

git pull origin master --allow-unrelated-histories

Se abrirá una fusión vim. Agregue un mensaje de fusión y:

  1. Presione ESC
  2. Presione Mayús + '';''
  3. Presione ''w'' y luego presione ''q''.

Y eres bueno para ir.


En su rama: diga maestro, extraiga y permita historias no relacionadas

git pull origin master --allow-unrelated-histories

Trabajó para mi.



Si bien estoy a favor de desbloquear los problemas de trabajo de las personas, no creo que "push --force" o "--allow_unrelated_histories" deba enseñarse a los nuevos usuarios como soluciones generales porque pueden causar estragos reales en un repositorio cuando uno los usa sin entender por qué las cosas no funcionan en primer lugar.

Cuando tiene una situación como esta en la que comenzó con un repositorio local y desea hacer un control remoto en GitHub para compartir su trabajo, hay algo que debe tener en cuenta.

Cuando crea el nuevo repositorio en línea, hay una opción "Inicializar este repositorio con un archivo README". Si lee la letra pequeña, dice "Omita este paso si está importando un repositorio existente".

Es posible que haya marcado esa casilla. O de manera similar, realizó un agregado / confirmación en línea antes de intentar un empuje inicial. Lo que sucede es que creas un historial de confirmación único en cada lugar y no se pueden reconciliar sin la asignación especial mencionada en la respuesta de Nevermore (porque git no quiere que operes de esa manera). Puede seguir algunos de los consejos mencionados aquí, o más, simplemente no marque esa opción la próxima vez que quiera vincular algunos archivos locales a un nuevo control remoto; manteniendo el control remoto limpio para ese empuje inicial.

Referencia: mi primera experiencia con git + hub fue encontrar este mismo problema y aprender mucho para entender lo que había sucedido y por qué.


Si no hay un historial sustancial en un extremo (es decir, si es solo una confirmación de readme en el github), a menudo me resulta más fácil copiar manualmente el readme a mi repositorio local y hacer un git push -f para hacer mi versión El nuevo root commit.

Creo que es un poco menos complicado, no requiere recordar una bandera oscura y mantiene el historial un poco más limpio.


git checkout master git merge origin/master --allow-unrelated-histories

Resolver conflictos, entonces

git add -A . git commit -m "Upload" git push