Atualmente, tenho três arquivos modificados no meu diretório de trabalho. No entanto, quero que um deles seja redefinido para o status HEAD.
No SVN, eu usaria svn revert <filename>
(seguido por, svn update <filename>
se necessário), mas no Git eu deveria usar git reset --hard
. No entanto, este comando não pode operar em um único arquivo.
Existe alguma maneira no Git de descartar as alterações em um único arquivo e substituí-lo por uma cópia HEAD nova?
git checkout
abaixo está a resposta. No git, "reverter" é algo que você faz em um commit. "Revert" repete o inverso de uma confirmação histórica em seu diretório de trabalho, para que você possa fazer uma nova confirmação que "desfaça" a confirmação revertida. Acho que esse é um ponto frequente de confusão para as pessoas que vêm para o gn a partir do svn.Respostas:
Você pode usar o seguinte comando:
... que atualizará a cópia de trabalho
my-file.txt
e seu estado no índice com o do HEAD.--
basicamente significa: trate todos os argumentos após esse ponto como um nome de arquivo . Mais detalhes nesta resposta . Agradecemos ao VonC por apontar isso.fonte
HEAD~1
para indicar o penúltimo commit.HEAD
se você está na cabeça do ramo atual - ver norbauer.com/rails-consulting/notes/...reset
comando (como está escrito) "não pode fazer redefinições forçadas com caminhos" e por que ocheckout
comando não é (não pode ser?) Usado para redefinir com firmeza todo o conjunto? (Quero dizer, por que foi projetado assim.)git checkout
: "Substitua caminhos na árvore de trabalho substituindo pelo conteúdo no índice ou no <tree-ish>". Ou seja, se<tree-ish>
for omitido, qualquer conteúdo no índice será usado para atualizar a árvore de trabalho. Isso pode ou não diferir do HEAD.Redefinir para a cabeça:
Para redefinir um único arquivo para HEAD:
Note que
@
é a abreviação deHEAD
. Uma versão mais antiga do git pode não suportar o formato abreviado.Redefinir para o índice:
Para redefinir com firmeza um único arquivo para o índice , assumindo que o índice não esteja vazio, caso contrário, para HEAD:
O ponto é que, para ser seguro, você não deseja excluir
@
ouHEAD
usar o comando, a menos que queira especificamente redefinir apenas o índice .fonte
man bash
página. Também mencionado nesta resposta: unix.stackexchange.com/a/187548/142855--
é usado para informar o programaI've finished specifying "options", and from here on, everything will be a positional argument.
. Convencionalmente, "opções" são os tokens--recursive
que podem aparecer em qualquer ordem ou até mesmo serem combinados em sua forma abreviada, como comrm -rf
. Pelo contrário, "argumentos posicionais" são muito mais parecidos com argumentos passados para uma função em uma linguagem de programação: sua posição na lista de tokens define o que exatamente o programa fará com eles (geralmente são nomes de arquivos).--
remove a ambiguidade de qual é qual.Para reverter para upstream / master, faça:
fonte
Desde o Git 2.23 (agosto de 2019), você pode usar
restore
( mais informações ):O acima será restaurado
MyFile
emHEAD
(o último commit) no ramo atual.Se você deseja obter as alterações de outro commit, você pode voltar no histórico de commit. O comando abaixo terá
MyFile
dois commits anteriores ao último. Você precisa agora da opção-s
(--source
), já que agora usamaster~2
e nãomaster
(o padrão) ao restaurar a fonte:Você também pode obter o arquivo de outro ramo!
fonte
A referência ao HEAD não é necessária.
git checkout -- file.js
é suficientefonte
você pode usar o comando abaixo para redefinir o arquivo único
Listar todos os arquivos alterados para obter
path_to_file/filename
com o comando abaixofonte
Você pode usar o seguinte comando:
git reset -- my-file.txt
que atualizará a cópia de trabalho de
my-file.txt
quando adicionada.fonte
Você pode usar o seguinte comando:
Se você possui uma ramificação com o mesmo nome de arquivo, deverá usar este comando:
fonte
Uma maneira simples, fácil e prática de tirar você da água quente, especialmente se você não está tão confortável com o git:
Veja o log do seu arquivo
git log myFile.js
confirmar 1023057173029091u23f01w276931f7f42595f84f Autor: kmiklas Data: terça-feira, 7 de agosto de 09:29:34 2018 -0400
JIRA-12345 - Refatorar com nova arquitetura.
Observe o hash do arquivo:
1023057173029091u23f01w276931f7f42595f84f
Mostre o arquivo usando o hash. Certifique-se de que é o que você deseja:
git show 1023057173029091u23f01w276931f7f42595f84f: ./ myFile.js
Redirecionar arquivo para uma cópia local
git show 1023057173029091u23f01w276931f7f42595f84f: ./ myFile.js> myFile.07aug2018.js
Faça backup do seu arquivo atual.
cp myFile.js myFile.bak.js
Abra os dois arquivos no seu editor de texto favorito.
vim myFile.js
vim myFile.07aug2018.js
Copie e cole o código de myFile.07aug2018.js para myFile.js e salve.
Confirme e envie myFile.js
Mais uma vez, visualize o log e confirme se seu arquivo está no lugar correto.
Diga aos seus clientes para obterem a versão mais recente e observem com satisfação que ele funciona com a versão antiga.
Não é a solução mais sexy ou mais centrada no git, e definitivamente uma redefinição / reversão "manual", mas funciona. Requer conhecimento mínimo de git e não perturba o histórico de consolidação.
fonte