@podvzbzdnul

Как сохранить переименование файла после git reset head^?

Когда нужно переключиться на другую задачу, в текущей ветке я просто делаю git commit -am 1, затем возвращаюсь, делаю git reset head^ и продолжаю работу.
Суть вопроса вот в чем - например, в коммите есть переименованный файл, но git reset head^ удаляет старый файл и добавляет новый.

пример
$ git mv 1.txt 2.txt
$ git status 
        renamed:    1.txt -> 2.txt

$ git commit -am test
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename 1.txt => 2.txt (100%)

$ git reset head^
$ git status
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    1.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        2.txt

Судя по всему, это by design, есть ли способ вернуть результат git mv после резета?
Раньше пользовался git stash / git stash pop --index, но часто возникала путаница в застэшенных изменениях, решил отказаться в пользу git commit.
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
Так может вам нужен git reset --soft HEAD^?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sergey-kuznetsov
@sergey-kuznetsov
Автоматизатор
Git не отслеживает перемещение файлов явно. Когда вы переименовываете файл в Git, в нём не сохраняется никаких метаданных, говорящих о том, что файл был переименован. В репозитории фактически удаляется старый файл и создаётся идентичный новый, но с другим именем.

git status показывает что файл переименован, только после того, как вы проиндексируете ваши изменения.
git mv автоматически индексирует переименовынный файл.
Подробнее...
это эквивалентно выполнению следующих команд
mv 1.txt 2.txt
git rm 1.txt
git add 2.txt

А после git reset head^ индекс чист, поэтому статус показывает так.
Вам поможет команда git reset --soft head^, которая как раз восстанавливает индекс тоже.
И статус уже сразу покажет что файл переименован.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы