Eu li isso ao renomear arquivos no git , você deve confirmar quaisquer alterações, executar sua renomeação e depois preparar seu arquivo renomeado. O Git reconhecerá o arquivo a partir do conteúdo, em vez de vê-lo como um novo arquivo não rastreado, e manterá o histórico de alterações.
No entanto, fazendo exatamente isso esta noite, acabei revertendo para git mv
.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Renomeie minha folha de estilo no Finder de iphone.css
paramobile.css
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: css/iphone.css
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# css/mobile.css
Então o git agora acha que excluí um arquivo CSS e adicionei um novo. Não é o que eu quero, vamos desfazer a renomeação e deixar o git fazer o trabalho.
> $ git reset HEAD .
Unstaged changes after reset:
M css/iphone.css
M index.html
Voltar para onde eu comecei.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Vamos usar em seu git mv
lugar.
> $ git mv css/iphone.css css/mobile.css
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: css/iphone.css -> css/mobile.css
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.html
#
Parece que estamos bem. Então, por que o git não reconheceu o nome da primeira vez que usei o Finder?
git mv old new
atualiza automaticamente o índice. Ao renomear fora do Git, você precisará fazer git add new
e git rm old
realizar as alterações no índice. Depois de ter feito isso git status
funcionará como esperado.
public_html
diretório, que é rastreado no git. Tendo realizado git add .
e git commit
, ainda mostrou um monte de arquivos 'excluídos' no git status
. Eu executei um git commit -a
e as exclusões foram confirmadas, mas agora não tenho histórico nos arquivos que vivem public_html
agora. Esse fluxo de trabalho não é tão bom quanto eu gostaria.
add+rm
oumv
- produz o mesmo resultado. O Git usa sua detecção de renomeação / cópia para que você saiba que foi uma renomeação. A fonte que você citou também é imprecisa. Realmente não importa se você modifica + renomear no mesmo commit ou não. Quando você faz uma diferença entre modificar e renomear, a detecção de renomeação será vista como uma renomeação + modificação, ou se a modificação for uma reescrita total, será exibida como adicionada e excluída - ainda não importa como você executou isto.