Desfazer git mv (renomear)


139

Qual é a maneira correta de desfazer uma renomeação no git, como:

git mv file1 file2

21
Resposta insolente:git mv file2 file1
CanSpice

@ CanSpice: Essa é a resposta correta; nada de insolente sobre isso.
CB Bailey

1
@ Charles: Bem, então, eu forneci como uma resposta não atrevida adequada. :-)
CanSpice

git mv arquivo2 arquivo1 Você esperava mais alguma coisa?
Lakshman Prasad

Respostas:


230

Resposta não atrevida:

git mv file2 file1

Atualiza o índice para caminhos antigos e novos automaticamente.

Verifique a documentação do git mv


4
suponha que file1 e file2 estejam no diretório atual (.), por git checkout .que não funciona, mesmo com a -fopção?
Ryenus 19/05

9
Parece raro que as coisas são tão intuitivo como este :)
ragerdl

@ryenus Você precisa usar git checkout -- ..
Joseph238

Ri muito. Isto é engraçado.
Dmitriy Dokshin 31/03

Não funcionou para mim dando o erro:, fatal: source directory is empty,apenas git reset --hardfuncionou.
mac13k 20/06

43

Se você não fez outras alterações (que deseja manter) desde a última confirmação, poderá fazer

git reset --hard

6
Eu não gostaria de ter o hábito de usar git reset --hard. Apenas movê-lo para trás parece uma opção mais segura para mim.
Osa

4
Trabalhou para mim. Eu queria desfazer um "git mv" que: 1) ainda não tinha sido cometido, e 2) eu não tinha outros chages
Ed da Montanha

Se você tiver outras alterações que deseja manter, isso destruirá todas elas.
user151841


9

No meu caso, movi uma pasta inteira e percebi que não deveria.

Gostei muito da resposta de @Dave Konopka, mas não tive muito sucesso com essa abordagem (talvez minha versão do GIT (1.8.4)?) Meus arquivos ainda foram exibidos como excluídos. Houve outras alterações na pilha que não queria perder (infelizmente).

Eu tive sucesso fazendo isso:

git reset moved_folder
git checkout original_folder

8

Depende do que você deseja realizar. Se você deseja que ele apareça como se o arquivo nunca tivesse sido movido, é possível redefinir (ou refazer a recuperação) antes da mudança. Se você não se importa com a história, basta recuar.


4
O primeiro funciona bem desde que você não tenha enviado seu commit ou alguém não tenha retirado de você.
CanSpice

7

Se você tiver renomeado acidentalmente um grande número de arquivos e quer voltar para onde você começou, apagar todos os arquivos renomeados que aparecem como addssob umagit status chamada.

Depois de excluir todos os arquivos alterados, você pode executar git checkout -- *para recuperar os nomes dos arquivos originais localmente.


4
git reset HEAD file2
git checkout -- file1
rm file2

O primeiro comando desestaca file2, mas deixa uma cópia dele por aí. O segundo comando restaura o arquivo original e o terceiro exclui o novo arquivo.


1

O truque que usei foi fazer um git stash para desfazer todas as minhas alterações (o que inclui restaurar os arquivos mv'd) e, em seguida, excluí-lo com o git stash drop.


0

Menos assustador é ir para o nível superior do repositório e fazer:

git redefinir
git checkout.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.