Git: ¿No se supone que los cambios permanecen dentro de su twig?

Soy relativamente nuevo en el uso de Git. Esto es lo que he hecho hasta ahora:

$ git branch * master $ git status # On branch master nothing to commit (working directory clean) $ git branch mywork $ git checkout mywork $ git branch * mywork master ...modify some files... $ git status # On branch mywork # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: file1.html # modified: file2.html # no changes added to commit (use "git add" and/or "git commit -a") 

Ahora si cambio a mi otra twig, espero que mis cambios permanezcan dentro de esta twig. Sin embargo, parece que los cambios vienen conmigo:

 $ git checkout master M file1.html M file2.html Switched to branch 'master' $ git status # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: file1.html # modified: file2.html # no changes added to commit (use "git add" and/or "git commit -a") 

¿Estoy haciendo algo mal? ¿O estoy malinterpretando mi uso de Git?

Antes de volver a su twig principal, necesita agregar y confirmar sus cambios a la twig.

Utilizar:

 git checkout mywork # Modify files git add . # Adds all edited files to the repository git commit -m "Message about the changes" git checkout master 

Puedes encontrar mucha información sobre Git en The Git Book

Su directory de trabajo y su repository están separados el uno del otro, en el sentido de que el código en su directory de trabajo no está asociado con una twig hasta que se haya comprometido.

Para enturbiar aún más las aguas, git ha introducido un nuevo concepto llamado índice, que es un terreno de testing entre su directory de trabajo y su repository . Cuando ejecutas git add en un file, lo que realmente estás haciendo es agregarlo al índice. Del mismo modo, cuando ejecutas git commit , finalmente agregas el contenido del índice al repository.

git status distingue entre el índice y el directory de trabajo de la siguiente manera.

  • Changes to be committed: indica cambios en el índice
  • Changed but not updated: indica cambios en el directory de trabajo a los files que ya se han agregado al repository (y que no se han ignorado posteriormente)
  • Untracked files: indica cambios en el directory de trabajo a files que aún no se han agregado al repository

Si tiene algunos cambios que quiere save por el momento pero que no justifican su propia sucursal, use git stash . Este es el mecanismo de git para crear una twig de compromiso único extremadamente liviana. De la página de manual (el énfasis es mío):

Use git stash cuando quiera registrar el estado actual del directory de trabajo y el índice , pero quiera volver a un directory de trabajo limpio. El command guarda sus modificaciones locales y revierte el directory de trabajo para que coincida con el compromiso HEAD .

eso es porque no los has comprometido en la twig de mywork. una vez que los cometes y compras la twig principal no encontrarás esos cambios

encontrará esta publicación SO muy útil

En inglés un tanto más simple que otras respuestas (correctas): git checkout no pisotea files que desconoce. Como no has hecho git add en file1.html y file2.html, git no los conoce y no los elimina cuando cambias de twig.

Si los add y los commit en branch mywork, desaparecerían cuando revises master, y volverás cuando revises mywork.