git リポジトリからファイルを削除する際に問題があります。実演するには: 空のディレクトリで次を実行します。
git init
echo "A" > A.txt
echo "B" > B.txt
git add .
git commit -a -m "1. version"
echo "C" > C.txt
git add .
git commit -a -m "2. version"
echo "A" >> A.txt
git add .
git commit -a -m "3. version"
ここで、ファイル「A.txt」をリポジトリから完全に削除したいと思います(存在しなかったかのように):
rm A.txt
git log --pretty=oneline --branches -- A.txt
git filter-branch --index-filter \
'git rm --cached --ignore-unmatch A.txt' \
-- --all
出力が得られます:
3ce037a722c2f382a9da42f73577628a639cae25 3. version
43a12da356ad3643657e6bb06259c84f78b82bed 1. version
Cannot rewrite branches: You have unstaged changes.
次にgit status
与えます:
# On branch master
# 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: A.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
ここで何が間違っていますか?A.txt
ファイルを完全に削除するにはどうすればよいですか?