git staging e committing entre múltiplos branches
Eu claramente não entendo git em tudo. É isso que estou recebendo:
<code>git branch (outputs that I'm on master) git checkout -b foo echo "next line" >> file (file is an existing file) git add file (stages) git checkout master git status (shows that file has "next line" and is staged!!) git commit (commits the changes that were staged on branch foo!!) git checkout foo </code>
Aqui está o kicker. foo agora não mostra nenhuma alteração feita no arquivo no diretório de trabalho OR staged.
Parece que - qualquer alteração feita, incluindo modificação de arquivos e preparo, ocorre em TODAS as filiais. e quando você COMPRAR a uma ramificação específica, essas alterações serão descartadas em todas as outras ramificações, exceto aquela com a qual você se comprometeu.
Isso é realmente o que está acontecendo? Alguém pode fazer isso fazer sentido para mim? Parece um comportamento completamente maluco e claramente eu não entendo a ideia de design que faz disso uma coisa sensata a fazer.
Editar para exemplo explícito:
<code>$ mkdir element $ cd element $ git init Initialized empty Git repository in /home/dan/element/.git/ $ echo "one" >> one $ git add one $ git commit -m msg [master (root-commit) 36dc8b0] msg 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 one $ git checkout -b fire Switched to a new branch 'fire' $ echo "next line" >> one $ git checkout master M one Switched to branch 'master' $ cat one one next line $ </code>
Que patentemente contradiz isso do livro git pro:
This is an important point to remember: Git resets your working directory to look like the snapshot of the commit that the branch you check out points to. It adds, removes, and modifies files automatically to make sure your working copy is what the branch looked like on your last commit to it.