git 管理をやめる

More than 1 year has passed since last update.


ディレクトリごとはずす

$ rm -rf .git/

ディレクトリごとでバージョン管理から外したい場合は git 管理ディレクトリを削除してしまえば良い。バージョン管理を始めた時に唱えた git init のときに配下に .git/ が作られてそこに情報が蓄積されているだけのため、それさえなくなれば他とおんなじ単なるディレクトリと化す。

tester@b4b4r07:~/git_test (master)$ rm -rf .git/

tester@b4b4r07:~/git_test$ git status
fatal: Not a git repository (or any of the parent directories): .git
exit 128


特定ファイルを管理から外す

とりあえず下準備。

tester@b4b4r07:~/git_test$ ls

abc def
tester@b4b4r07:~/git_test$ git init
Initialized empty Git repository in /Users/tester/git_test/.git/
tester@b4b4r07:~/git_test (master #%)$ git add .
tester@b4b4r07:~/git_test (master #)$ git commit -m 'first commit'
[master (root-commit) 42698c8] first commit
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 abc
create mode 100644 def
tester@b4b4r07:~/git_test (master)$


rm コマンドで物理的に削除する

tester@b4b4r07:~/git_test (master)$ rm abc 

tester@b4b4r07:~/git_test (master *)$ 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: abc

no changes added to commit (use "git add" and/or "git commit -a")
tester@b4b4r07:~/git_test (master *)$

物理的に削除しても、git の管理から外れたわけではないので、git rm abc して、「git 管理の対象から削除しますよ」と伝えてやらなければならない。逆に言うと git管理上から外れたわけではないので、元に戻してやれば、何事もなかったかのようになる。 以下、実証

tester@b4b4r07:~/git_test (master *)$ touch abc

tester@b4b4r07:~/git_test (master)$ git status
On branch master
nothing to commit, working directory clean
tester@b4b4r07:~/git_test (master)$


git rm で git 管理上から削除する

tester@b4b4r07:~/git_test (master)$ ls

abc def
tester@b4b4r07:~/git_test (master)$ git rm abc
rm 'abc'
tester@b4b4r07:~/git_test (master +)$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

deleted: abc

tester@b4b4r07:~/git_test (master +)$ ls
def
tester@b4b4r07:~/git_test (master +)$

物理的にも削除され、git 管理上からも削除されているので、commit の手前(普段でいう add のあと)という段階になっている。たとえここでさっきやった復元方法を試してみるとわかるが、

tester@b4b4r07:~/git_test (master +)$ touch abc

tester@b4b4r07:~/git_test (master +%)$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

deleted: abc

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

abc

tester@b4b4r07:~/git_test (master +%)$

同名ファイルを作成しても別物扱いになるので、ファイル名「abc」が git 管理から外れていることがよく分かる。

また、もし今実行した git rm を取り消したいのなら use "git reset HEAD ..." to unstage にある通りにすれば良い。