Como posso copiar o conteúdo de uma ramificação para uma nova ramificação local?

270

Eu trabalhei em uma filial local e também enviei as alterações para remoto. Quero reverter as alterações nesse ramo e fazer outra coisa, mas não quero perder o trabalho completamente. Eu estava pensando em algo como criar um novo ramo localmente e copiar o ramo antigo lá, para poder reverter as alterações e continuar trabalhando no ramo antigo. Existe uma maneira melhor, talvez? Ou como faço isso?

serengeti12
fonte
10
4 anos depois, com o Git 2.15 (quarto trimestre de 2017), você terá git branch -c A B. Veja minha resposta abaixo
VonC

Respostas:

445
git checkout old_branch
git branch new_branch

Isso fornecerá uma nova ramificação "new_branch" com o mesmo estado que "old_branch".

Este comando pode ser combinado com o seguinte:

git checkout -b new_branch old_branch
Daniel Hilgarth
fonte
134
Ou ainda mais curto git checkout -b new_branch(quando você já está no ar old_branch).
Koraktor
4
Isso acabou de criar a nova ramificação, mas não é possível copiar o conteúdo de uma ramificação para outra ramificação. Quando eu tento este comando, apenas mostrando "O ramo chamado **** já existe".
anoop
7
Eu acho que se alguém cria um novo ramo como esse, não instantaneamente tem uma cópia do ramo antigo, mas simplesmente um novo ponteiro na cabeça do ramo antigo. Mas quando você agora faz algo como refazer a nova ramificação, deve ver que a ramificação antiga ainda está em seu estado original enquanto a nova ramificação é modificada. Então eu acho que faz o que o OP quer.
uli_1973
1
git checkout old_branch e git branch new_branch .... É melhor usar o comando acima na produção, pois o comando abaixo criará uma nova ramificação e o levará para a nova ramificação (alterar ramificação como nova ramificação) .... git checkout -b new_branch old_branch
Kiran
Para substituir uma ramificação, consulte stackoverflow.com/questions/26961371/…
MCCCS
55
git branch copyOfMyBranch MyBranch

Isso evita o ato potencialmente demorado e desnecessário de verificar uma ramificação. Lembre-se de que um check-out modifica a "árvore de trabalho", que pode demorar muito se for grande ou contiver arquivos grandes (imagens ou vídeos, por exemplo).

Lyle Z
fonte
1
Obviamente, se você possui arquivos binários no git, especialmente arquivos grandes, provavelmente vale a pena analisar sua estratégia para esses arquivos. Naturalmente, casos incomuns existirão e ter arquivos binários no git seria perfeitamente aceitável.
reverendo
52

Com o Git 2.15 (quarto trimestre de 2017), " git branch" aprendi " -c/-C" a criar uma nova ramificação copiando uma existente.

Veja commit c8b2cec (18 de junho de 2017) de Ævar Arnfjörð Bjarmason ( avar) .
Consulte commit 52d59cc , commit 5463caa (18 de junho de 2017) por Sahil Dua ( sahildua2305) .
(Mesclado por Junio ​​C Hamano - gitster- na confirmação 3b48045 , 03 de outubro de 2017)

branch: adicione uma opção --copy( -c) para combinar com --move( -m)

Adicione a capacidade de --copyuma ramificação e seu reflog e configuração; isso usa o mesmo mecanismo subjacente da opção --move( -m), exceto que o reflog e a configuração são copiados em vez de serem movidos.

Isto é útil para, por exemplo copiar um ramo tema para uma nova versão, por exemplo, workpara work-2após a apresentação dowork tema à lista, preservando todas as informações de rastreamento e outra configuração que se passa com o ramo, e ao contrário de --movemanter o outro ramo já apresentado em torno de referência.

Nota: ao copiar uma ramificação, você permanece em sua ramificação atual.
Como Junio ​​C Hamano explica:

Ao criar uma nova ramificação B, copiando a ramificação Aque passa a ser a ramificação atual, ela também é atualizada HEADpara apontar para a nova ramificação.
Provavelmente foi feito dessa maneira porque " git branch -c A B" pegou sua implementação em " git branch -m A B",

Isso não corresponde à expectativa usual.
Se eu estivesse sentado em uma cadeira azul e alguém a repusesse em vermelho, eu aceitaria acabar sentado em uma cadeira que agora está vermelha (também estou bem em ficar em pé, pois não existe mais minha cadeira azul favorita )

Mas se alguém criar uma nova cadeira vermelha, modelando-a após a cadeira azul em que estou sentado, não espero ser arrancado da cadeira azul e acabar sentado na nova cadeira vermelha.

VonC
fonte