Remover um arquivo de uma ramificação no git implica removê-lo também da ramificação master?

Remover um arquivo de uma ramificação no git implica removê-lo também da ramificação master?

Acabei de enfrentar uma situação que me parece ilógica com o Git. Eu tenho um repositório com muitos commits, então neste estágio ele tem apenas um branch (mestre).

Filial mestre

Suponha que este branch tenha um arquivo chamadoMeuArquivo.txt. Agora preciso criar um branch diferente porque quero fazer algumas alterações em alguns arquivos e não quero fazer isso master branch diretamente, então executo:

git checkout iss53

Agora o esquema fica assim:

Nova filial

Tudo bem, mudei para branchiss53, eu corro ls -le oMeuArquivo.txt. Uma das mudanças inclui a exclusão doMeuArquivo.txtarquivo, então:

git rm MyFile.txt

Legal, correr ls -lde novo mostra que não háMeuArquivo.txtnão mais. Então eu volto para omestrefilial:

git checkout master

Mas oMeuArquivo.txtarquivo também desapareceu. Minha lógica diz que se eu excluí o arquivo em uma ramificação, ele deve ser aplicadoapenaspara esse branch, então por que o arquivo foi excluído domestreramo também? Observe que ainda não fiz nenhum commit, apenas ramificando.

Observação: Ambas as imagens são tiradas deGit-scm.

Responder1

A resposta está na sua pergunta:

Observe que ainda não fiz nenhum commit, apenas ramificando.

Se você não confirmar, as alterações serão sempre mantidas em seu diretório de trabalho. Mudar de branch não afeta seu diretório de trabalho, e o diretório de trabalho também não afeta seu último commit. Você está vendo que o arquivo foi excluído, mas a realidade é que ele foi excluído apenas do seu diretório de trabalho. Se você quiser limpar as alterações e retornar ao último commit use este comando:

git reset --hard HEAD

Portanto, o arquivo será restaurado novamente.

Talvez não seja lógico para você, mas esse comportamento pode ser útil. Imagine que você tem 2 ramificações: mastere development, e você deve sempre trabalhar developmentantes de mover as alterações para master. Digamos que você esqueceu de mudar para developmentantes de começar a trabalhar, então - antes de se comprometer - você percebeu que está no master. A solução é simples, basta mudar para developmente depois confirmar.

Responder2

Sempre que removi um arquivo de uma de minhas ramificações (que chamei de login), ele não foi removido da ramificação master.

  1. Mudei para o branch de logingit checkout login
  2. Arquivo test.html removidogit rm --cached test.html
  3. Adicionado tudo à área de testegit add .
  4. Confirmou as mudanças comgit commit -m 'removed test.html file'
  5. Empurrou o repositório local para o repositório remoto do Github comgit push

informação relacionada