Desfazer git mv (renomear)

139

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

git mv file1 file2
jrdioko
fonte
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

CanSpice
fonte
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
Klas Mellbourn
fonte
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
13
git reset HEAD file2

fez o truque para mim

zbig
fonte
1
O único problema que tive com esta resposta é que ela deixou cópias para o arquivo2 no disco.
precisa saber é o seguinte
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
zedd45
fonte
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.

William Pursell
fonte
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.

Dave Konopka
fonte
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.

Kamaraju Kusumanchi
fonte
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.

sevencontinentes
fonte
0

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

git redefinir
git checkout.

w0mbat
fonte