Когда stashing устраивает удаленные или переименованные файлы, а затем их разворачивает, они восстанавливаются как в удаленном, так и в не удаленном состоянии.
В следующем примере:
$ git status s
A file0
D file1
R file2 -> file3
?? file4
running git stash push -k -u
, а затем git stash pop --index
оставит меня в следующем состоянии:
$ git status s
A file0
D file1
R file2 -> file3
?? file1
?? file2
?? file4
Я ожидал бы, что закончится в исходном состоянии, без удаленных файлов, которые снова появятся без следа после pop
.
Как это обойти?
Изменить: Здесь script, который воссоздает проблему (протестирован в Mac OS X 10.13.2 с git 2.16.1)
#!/usr/bin/env bash
echo -e "\nInitializing a fresh git dir..."
mkdir gitStashIssue && cd $_
rm -rf * .*
git init
echo -e "\nPreparing git state for test..."
# Create files and commit them
echo 'abc' > file1
echo 'aabbcc' > file2
echo 'aaabbbccc' > file3
echo 'aaaabbbbcccc' > file4
git add .
git commit -m 'initial commit'
# Make changes and add them to stage
echo `cat file1` >> file1
echo `cat file2` >> file2
git add .
# Make another change to a staged file without
# staging it, making it partially staged
echo `cat file1` >> file1
# Delete and rename files
git rm file3
git mv file4 fileRenamed
# Add untracked file
echo "untracked" > untrackedFile
# git status -s should now show
# MM file1
# M file2
# D file3
# R file4 -> fileREnamed
# ?? untrackedFile
echo -e "\nCurrent git status is:"
git status -s
echo -e "\nStasing changes..."
git stash save -u -k
# git status -s should now show
# M file1
# M file2
# D file3
# R file4 -> fileREnamed
# ?? file3
# ?? file4
echo -e "\ngit status after stashing files is:"
git status -s
echo -e "\ncleaning up deleted and renamed files..."
git clean ./ -f
echo -e "\ngit status after cleanup:"
git status -s
echo -e "\nCommiting unstashed changes..."
git commit -m 'commit unstashed changes'
# This causes a conflict in file1
# git status -s should now show
# UU file1
# ?? untrackedFile
git stash pop --index
echo -e "\ngit status after unstashing:"
git status -s