¿Qué significa "Estás en medio de una session de la mañana"?

Cuando ejecuto el git status , esto es lo que estoy viendo:

 $ git status On branch master Your branch is ahead of 'origin/master' by 1 commit. (use "git push" to publish your local commits) You are in the middle of an am session. (fix conflicts and then run "git am --continue") (use "git am --skip" to skip this patch) (use "git am --abort" to restre the original branch) Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: xxx modified: xxx modified: xxx Untracked files: (use "git add <file>..." to include in what will be committed) xxx no changes added to commit (use "git add" and/or "git commit -a") $ git version git version 1.9.1 

Entonces, ¿qué 'ese git está tratando de decirme y cuál es la forma correcta de resolverlo?

No sé si eso es relevante, pero usamos gerrit y todos los cambios pasan por el process de revisión / aprobación.

arreglar conflictos

Haga un git diff para ver si tiene algún marcador de fusión, como:

 $ git diff hello.txt diff --cc hello.txt index 5eb9649,379bd44..0000000 --- a/hello.txt +++ b/hello.txt @@@ -1,1 -1,1 +1,7 @@@ ++<<<<<<< HEAD +Hello, master change. ++

| merged common ancestors ++Hello, Original. ++======= + Hello, branch b1 change. ++>>>>>>> b1

Si no, intenta y vuelve a aplicar git am con la opción -3 : git am -3

Si tiene, por ejemplo, usando kdiff3 (Windows o Linux), git mergetool --tool=kdiff3 . Eso lanzará una herramienta gráfica que le permitirá elegir entre local, base y remota

 +--------------------------------+ | BASE | LOCAL | REMOTE | +--------------------------------+ | MERGED | +--------------------------------+ 

http://tedfelix.com/software/git-mergetool-kdiff3.png

Con:

  • LOCAL : un file temporal que contiene el contenido del file en la twig actual.
  • BASE : un file temporal que contiene la base común para la combinación.
  • REMOTE : un file temporal que contiene el contenido del file que se fusionará.
  • MERGED : el file que contiene los marcadores de conflicto.

El git am --continue solo debe hacerse cuando el estado de git no informa ningún file no evaluado.

Ver más con Git Conflict Resolution por Ted Felix : tiene este útil resumen:

  1. Siempre use " -3 " con " git am " para asegurarse de get marcadores de conflicto.
  2. Use " git status " y " git diff " para descubrir qué salió mal.
  3. Resuelva los conflictos por cualquiera de los siguientes methods:
    • Edite cada file en conflicto con su editor favorito.
    • " git checkout --theirs " o " git checkout --ours ".
    • " git checkout -m " para deshacer la resolución de conflictos en files específicos. (¡TEN CUIDADO!)
    • " git mergetool " y una herramienta de combinación de GUI apropiada como kdiff3 .
  4. " git add " los files resueltos.
  5. " git am --continue " para continuar la mañana.

Lo que sucedió es que se modificó algún file en el tree de trabajo y se confirmó antes de que comenzara la session AM (AM es una forma de aplicar parches de posts de correo electrónico donde el correo electrónico se divide en cambios e información del autor y luego se aplica como un parche al depósito).

Esto es lo mismo que si hubiera cambiado el file, lo haya comprometido y luego haya intentado fusionar el cambio en el mismo file en las mismas líneas basadas en la versión anterior. Git simplemente no sabe qué versión de cambio es válida y, por lo tanto, termina en estado de conflict .

Estas líneas te dicen que tienes conflicto:

 You are in the middle of an am session. (fix conflicts and then run "git am --continue") (use "git am --skip" to skip this patch) (use "git am --abort" to restre the original branch) 

Hay varias forms de resolver este tipo de conflictos, y todas ellas son manuales. Necesitas alguna herramienta de combinación de 3 vías (puede google para ello) que te permite comparar los cambios y elegir el que deseas conservar. vim editor de vim AFAIK tiene esta herramienta incrustada, pero nunca la utilicé.

También hay herramientas gráficas que le permiten resolver conflictos en software como SourceTree o similar, pero todo depende de dónde está el repository y si esas herramientas gráficas están disponibles allí.

UPD: También puede revertir los cambios de la session AM haciendo git am --abort que está escrito en el post. Esto revertirá la bifurcación al estado antes de que se inicie la session de AM, perdiendo efectivamente la información del parche.

Veamos sus significados uno por uno …

En branch master Su branch está por delante de 'origin / master' en 1 commit. (use "git push" para publicar sus confirmaciones locales)

Esto significa que cometió algo localmente pero no lo ha sincronizado con el origen.

Local: el repository que clonó en su máquina y comenzó a trabajar en él.

origen: el repository principal desde donde cada persona puede clonar.

Estás en medio de una session de una mañana. (Arregle los conflictos y luego ejecute "git am –continue") (use "git am –skip" para omitir este parche) (use "git am –abort" para restaurar la twig original)

Estabas en medio de hacer un parche y tenías conflictos, tienes que restaurar las cosas al estado original (usando git am --abort ) o resolver los conflictos siguiendo estos pasos.

  1. Escriba el git status
  2. Compruebe el estado, si ve los nombres de los files que dicen ( both modified )

  3. Abra esos files, resuelva los conflictos manteniendo lo que quiere y descartando lo que no.

  4. Ahora agregue los files en los que resolvió los conflictos escribiendo git add file1 file2

  5. Ahora es el momento de continuar la session

  6. Escriba git am --continue

En caso de que quiera omitir este tipo de parche

 git am --skip 

Tuviste algunos cambios y estabas en medio de hacer un paréntesis. Cambios no realizados para commit: (use "git add …" para actualizar lo que se va a comprometer) (use "git checkout – …" para descartar cambios en el directory de trabajo)

 modified: xxx modified: xxx modified: xxx 

Archivos sin seguimiento: (use "git add …" para include en lo que se comprometerá)

 xxx 

no se agregaron cambios a commit (use "git add" y / o "git commit -a")

Entonces aquí git está tratando de informarte sobre los files que han sido cambiados desde el último commit. Los que eran files antiguos y usted acaba de cambiar algunas cosas aquí y allá se mostrarán como los modificados.

El que ve debajo de los files no rastreados es el que se desconocía anteriormente porque son files nuevos.

Pasos para resolver este paso

1.) Para los files sin seguimiento

 1.1.) git add <filename1> <filename2> and so on... 

2.) Confirmar los files agregados al repository

 2.1) git commit -m "Message of your choice" 

Nota

Como mencionó, también está trabajando con un sistema de revisión (gerrit). Es posible que desee agregar un nuevo parche a un commmit existente en lugar de un nuevo commit. Si ese es el caso, debes hacer esto

 git commit --amend 

3.) Ahora es el momento de presionar el código (si lo desea)

 git push 

Para gerrit haz esto

 git push review