Przeczytałem, że zmieniając nazwę plików w git , powinieneś zatwierdzić wszelkie zmiany, zmienić nazwę, a następnie wprowadzić zmiany w pliku o zmienionej nazwie. Git rozpozna plik na podstawie zawartości, zamiast widzieć go jako nowy nieśledzony plik i zachowa historię zmian.
Jednak robiąc to właśnie tej nocy, w końcu powróciłem do git mv
.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Zmień nazwę mojego arkusza stylów w Finderze z iphone.css
namobile.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
Więc git teraz myśli, że usunąłem jeden plik CSS i dodałem nowy. Nie to, czego chcę, cofnijmy zmianę nazwy i pozwól git wykonać pracę.
> $ git reset HEAD .
Unstaged changes after reset:
M css/iphone.css
M index.html
Z powrotem tam, gdzie zacząłem.
> $ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
Pozwala git mv
zamiast tego użyć .
> $ 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
#
Wygląda na to, że jesteśmy dobrzy. Dlaczego więc nie rozpoznałem nazwy po raz pierwszy, kiedy korzystałem z Findera?
git mv old new
automatycznie aktualizuje indeks. Kiedy zmienisz nazwę poza Git, będziesz musiał zrobić git add new
i git rm old
wprowadzić zmiany w indeksie. Po wykonaniu tej czynności git status
będzie działać zgodnie z oczekiwaniami.
public_html
, które są śledzone w git. Po wykonaniu git add .
i git commit
nadal wyświetlał kilka „usuniętych” plików w git status
. Wykonałem git commit -a
a, usunięcie zostało zatwierdzone, ale teraz nie mam historii plików, które są public_html
teraz w użyciu. Ten przepływ pracy nie jest tak płynny, jak bym chciał.
add+rm
lubmv
- daje ten sam wynik. Następnie Git wykrywa zmianę nazwy / kopii, aby poinformować cię, że była to zmiana nazwy. Źródło, które zacytowałeś, jest również niedokładne. Naprawdę nie ma znaczenia, czy modyfikujesz + zmieniasz nazwę w tym samym zatwierdzeniu, czy nie. Gdy zmienisz zarówno modyfikację, jak i zmianę nazwy, wykrywanie zmiany nazwy spowoduje, że będzie to zmiana nazwy + modyfikacja, lub jeśli modyfikacja jest całkowitym przepisem, będzie wyświetlana jako dodana i usunięta - nadal nie ma znaczenia, jak wykonałeś to.