Existe uma maneira de fazer um git pull
que ignore qualquer alteração de arquivo local sem soprar o diretório e precisar executar um git clone
?
rm -rf local_repo && git clone remote_url
.
Existe uma maneira de fazer um git pull
que ignore qualquer alteração de arquivo local sem soprar o diretório e precisar executar um git clone
?
rm -rf local_repo && git clone remote_url
.
Respostas:
Se você quer que o pull substitua as alterações locais, faça a mesclagem como se a árvore de trabalho estivesse limpa, bem, limpe a árvore de trabalho:
git reset --hard
git pull
Se houver arquivos locais não rastreados, você poderá usá git clean
-los para removê-los. Use git clean -f
para remover arquivos não rastreados, -df
para remover arquivos e diretórios não -xdf
rastreados e para remover arquivos ou diretórios não rastreados ou ignorados.
Se, por outro lado, você quiser manter as modificações locais de alguma forma, use o stash para escondê-las antes de puxá-las e depois reaplicá-las depois:
git stash
git pull
git stash pop
Não acho que faça sentido ignorar literalmente as alterações - metade da atração é mesclada e precisa mesclar as versões confirmadas do conteúdo com as versões buscadas.
git reset
seus arquivos ainda diferirem do controle remoto, leia stackoverflow.com/questions/1257592/…
git reset --hard
afeta o primeiro, não o último. Se você deseja redefinir completamente o estado do controle remoto, git reset --hard origin/<branch>
- mas com frequência e nesse caso, esses dois commits pelos quais você está à frente da origem são um trabalho que você fez, não algo que você deseja jogar fora.
Para mim, o seguinte funcionou:
(1) Primeiro busque todas as alterações:
$ git fetch --all
(2) Reinicie o mestre:
$ git reset --hard origin/master
(3) Puxar / atualizar:
$ git pull
Você só quer um comando que dê exatamente o mesmo resultado que rm -rf local_repo && git clone remote_url
, certo? Eu também quero esse recurso. Eu me pergunto por que o git não fornece esse comando (como git reclone
ou git sync
), nem o svn fornece esse comando (como svn recheckout
ou svn sync
).
Tente o seguinte comando:
git reset --hard origin/master
git clean -fxd
git pull
git clean -fxd
remove arquivos de .gitignore
também.
O comando abaixo não funcionará sempre . Se você fizer exatamente:
$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.
$ git reset --hard
HEAD is now at b05f611 Here the commit message bla, bla
$ git pull
Auto-merging thefile1.c
CONFLICT (content): Merge conflict in thefile1.c
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
e assim por diante...
Para realmente começar de novo, baixando a ramificação e substituindo todas as alterações locais, basta:
$ git checkout thebranch
$ git reset --hard origin/thebranch
Isso vai funcionar muito bem.
$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.
$ git reset --hard origin/thebranch
HEAD is now at 7639058 Here commit message again...
$ git status
# On branch thebranch
nothing to commit (working directory clean)
$ git checkout thebranch
Already on 'thebranch'
Veja o git stash para colocar todas as alterações locais em um "arquivo stash" e reverter para a última confirmação. Nesse ponto, você pode aplicar suas alterações ocultas ou descartá-las.
Se você estiver no Linux:
git fetch
for file in `git diff origin/master..HEAD --name-only`; do rm -f "$file"; done
git pull
O loop for excluirá todos os arquivos rastreados que são alterados no repositório local, portanto git pull
, funcionará sem problemas.
O mais legal é que apenas os arquivos rastreados serão substituídos pelos arquivos no repositório, todos os outros arquivos permanecerão intocados.
isso funcionou para mim
git fetch --all
git reset --hard origin/master
git pull origin master
com a resposta aceita, recebo erros de conflito
Eu costumo fazer:
git checkout .
git pull
Na pasta raiz do projeto.
.gitignore
"Adicionar arquivos indesejados ao .gitignore funciona, desde que você não os tenha comprometido inicialmente com nenhuma ramificação."
Além disso, você pode executar:
git update-index --assume-unchanged filename
https://chamindac.blogspot.com/2017/07/ignoring-visual-studio-2017-created.html