すでにGitで追跡されているファイルを追跡対象から除外する方法についてまとめてみました。
まだGitで一度もコミットしていないファイルであれば、.gitignore内にGitで管理したくないファイル名を追加すればいいのですが、既に一度でもコミットしてしまったファイルであれば、まずはGitの管理対象から除外する必要があります。
事前準備
まず事前準備として以下の内容を実施しておきます。
大まかな流れは、デスクトップにgitdemoというフォルダを作成し、その中でgit initをして初期化しておきます。
hello.txtファイルと.gitignoreファイルをそこに作成し、ステージした後で最初のコミットをしています。
kaz@ubuntu-server:~$ mkdir gitdemo
kaz@ubuntu-server:~$ cd gitdemo/
kaz@ubuntu-server:~/gitdemo$ git init
Initialized empty Git repository in /home/kaz/gitdemo/.git/
kaz@ubuntu-server:~/gitdemo$ echo >> .gitignore
kaz@ubuntu-server:~/gitdemo$ touch hello.txt
kaz@ubuntu-server:~/gitdemo$ git add .
kaz@ubuntu-server:~/gitdemo$ git commit -m 'first commit'
[main (root-commit) 0ebc690] first commit
2 files changed, 1 insertion(+)
create mode 100644 .gitignore
create mode 100644 hello.txt
特定のファイルをGitの管理下から除く時
ここではtouchコマンドでunused.txtファイルを作成してコミットしています。
kaz@ubuntu-server:~/gitdemo$ touch unused.txt
kaz@ubuntu-server:~/gitdemo$ git status
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
unused.txt
nothing added to commit but untracked files present (use "git add" to track)
kaz@ubuntu-server:~/gitdemo$ git add .
kaz@ubuntu-server:~/gitdemo$ git commit -m 'add unused file'
[main f83af99] add unused file
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 unused.txt
kaz@ubuntu-server:~/gitdemo$ ls
hello.txt unused.txt
vimでunused.txtファイルに適当な文字を書き込んで保存し、ステータスを確認するとgit上では当然変更したと認識されます。
kaz@ubuntu-server:~/gitdemo$ vim unused.txt
kaz@ubuntu-server:~/gitdemo$ git status
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: unused.txt
no changes added to commit (use "git add" and/or "git commit -a")
ここでこのunused.txtファイルをgitでの管理から除外したい場合は以下のコマンドで除外します。
git statusで確認すると、unused.txtはUntracked file (gitで変更を追跡されていないファイル)になっていることがわかると思います。
kaz@ubuntu-server:~/gitdemo$ git rm --cached unused.txt
rm 'unused.txt'
kaz@ubuntu-server:~/gitdemo$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: unused.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
unused.txt
余談
このままでもいいのですが、毎回git statusでUntracked filesに表示されるのは煩わしいので、こういったgitの追跡対象としないファイルは.gitignoreファイルに書き込むことでgitの追跡対象からは永久に除外する設定をします。
以下ではecho unused.txt >> .gitignoreで.gitignoreファイルに unused.txtの文字列を追加しています。
その後のgit statusではUntracked filesの項目がなくなっていることがわかります。(unused.txtがgitの追跡対象から除外された。)
kaz@ubuntu-server:~/gitdemo$ echo unused.txt >> .gitignore
kaz@ubuntu-server:~/gitdemo$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: unused.txt
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .gitignore
最後に.gitignoreに文字を追加したので、この部分の変更をコミットしておきます。
kaz@ubuntu-server:~/gitdemo$ git add .
kaz@ubuntu-server:~/gitdemo$ git commit -m 'modified .gitignore'
[main 2cee5dc] modified .gitignore
2 files changed, 1 insertion(+)
delete mode 100644 unused.txt
kaz@ubuntu-server:~/gitdemo$ git status
On branch main
nothing to commit, working tree clean