Eu sou realmente novo no git e estou tentando entender por que o git continua mostrando tudo o que eu mudei em um branch em outro branch quando executei git checkout para alternar entre os branches. Primeiro, tentei não usar git add e não funcionou. No entanto, tentei usar git add, mas não resolvi o problema. Não estou usando o git commit ainda.
Isso é basicamente o que estou fazendo:
$ git clone <a_repository>
$ git branch
* master
$ git branch testing
$ git checkout testing
...edit a file, add a new one, delete...
$ git status
# On branch testing
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: file1.txt
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# file2.txt
no changes added to commit (use "git add" and/or "git commit -a")
$ git branch
master
* testing
$ git checkout master
D file1.txt
Switched to branch 'master'
$ git status
# On branch master
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: file1.txt
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# file2.txt
no changes added to commit (use "git add" and/or "git commit -a")
Eu pensei que, ao usar ramos, tudo o que você faz em um ramo, é invisível para todos os outros ramos. Não é por isso que se criam ramos?
Tentei usar "git add", mas as alterações são visíveis em ambos os ramos. Preciso executar "git commit" antes de alternar entre branches para evitar isso?
git add
eles antes de guardá-los. Dito isso, não tenho certeza se você realmente deseja esconder aqui - se você pretende que essas alterações façam parte do branch do qual você está mudando, envie-as. (Se você pretende voltar para aquele branch e trabalhar mais nas alterações antes de confirmá-las, entãostash
pode ser a ferramenta certa para o trabalho.)Resposta curta: sim, você precisa se comprometer. No entanto, certifique-se de fazer isso no branch certo!
Um branch é um ponteiro para um commit. Quando você efetua um commit com um branch em check-out, o branch avança para apontar para aquele novo commit. Quando você verifica um branch, está verificando o commit para o qual ele aponta. (Você pode pensar em commits como instantâneos de sua árvore de trabalho.)
Então, se você tem mudanças que não confirmou, elas não serão afetadas pela troca de branches. Claro, se a troca de branches for incompatível com suas alterações,
git checkout
você simplesmente se recusará a fazê-lo.git add
é um comando para preparar mudanças, que você então enviará. Ele não registra essas mudanças no histórico do repositório. Ele simplesmente os coloca em uma área de teste (o índice);git commit
em seguida, usa o conteúdo dessa área de teste para criar commits.fonte