Git入門#07(ファイルの移動・削除をしてみよう)




cocomaru
今日はファイルの移動と削除について、やり方を教えるよ!
hiromin
普通にmvコマンドや、rmコマンドじゃダメなんだ?!
cocomaru
おぉ〜?!勉強してるね〜!でも惜しい!GitではLinuxなどで使われるmvやrmコマンドじゃなくて、「git mv」「git rm」っていうコマンドを使うんだ。
hiromin
そうなんだ?!似てるから覚えやすいかも?!
cocomaru
でしょ?!それじゃあ早速だけど使ってみよう!
hiromin
うん!

ファイルを移動してみよう

どうも、cocomaruです。

今回はGitでのファイルの移動と削除について説明します。
まずはファイルの移動からですね!

git mv <移動元ファイル> <移動先ディレクトリ>

Linuxのコマンドに慣れている方なら「mvのコマンドと一緒じゃん。」と思われるかもしれませんが、実際に使い方は似ていて、違いとしてはGitで追跡されるかどうかです。

「ちょっとよくわからない…」と言った方もいると思うので動かして確認していきましょう!

# 前回、使用した作業用ディレクトリへ移動 
$ cd ~/Desktop/WorkDir

# 移動先のディレクトリ作成 
$ mkdir contents

# 移動先のディレクトリへindex.htmlを移動 
$ git mv index.html contents/

# 変更状況の確認 
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD ..." to unstage)

    renamed:    index.html -> contents/index.html

renamed: index.html -> contents/index.html」と表示されましたでしょうか?
「contents」ディレクトリに「index.html」ファイルを移動したので、上記のようにGitが移動したんだと認識しました。

git mvコマンドは以下の操作と同じです。
$ mv index.html contents/
$ git rm index.html
$ git add contents/index.html

git rmは後述しますが、一旦は「git rm」でファイルが削除されると思ってください。

では今度はmvコマンドで移動して、git mvコマンドとの違いを見てみましょう。

とりあえず元に戻します。

# ステージングへ追加された移動先のファイルを取り消し 
$ git reset HEAD contents/index.html

# ステージングへ「index.htmlを削除した」と保存された情報を取り消し 
$ git reset HEAD index.html

# git mvでindex.htmlが削除されたので、削除の取り消し 
$ git checkout -- index.html
git checkoutとgit reset
今回の説明で出てきた本コマンドですが、それぞれ以下の意味になります。
詳細は、また別の機会に説明したいと思います。

  • git checkout — <ファイル名|ディレクトリ名> – 作業用ディレクトリで変更した内容を取り消す
  • git reset – ステージング・エリアに追加した変更を取り消す

※「git checkout」は上記のほか、「ブランチを切り替える」役割もありますが、「」をつけることによって取り消す操作となります。

ではindex.htmlが元に戻ったので、mvコマンドを実行してみましょう。

$ mv index.html contents/
$git status
On branch master
Changes not staged for commit:
  (use "git add/rm ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

    deleted:    index.html

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

    contents/

no changes added to commit (use "git add" and/or "git commit -a")

「index.html」が「deleted: index.html」となっておりますが、先ほどと違うのは、「Changes not staged for commit」と、Gitから「なんかindex.htmlが削除した?でもステージング・エリアへもコミットもされてないけど…」と言われてますね。

git mvだとGitが「あ、これは移動したいんだな」とわかってくれますが、mvコマンドだとGitは認識できない操作になるので、
Gitでバージョン管理されたディレクトリの中では、ファイルの移動は「git mv」コマンドを使用するようにしましょう。

ファイルの移動の説明は以上です。
最後に説明用に作成しました「contents」を削除しておきましょう。

$ rm -fr contents

git mv <旧ファイル名> <新ファイル名>

今度はファイル名の変更を行ってみましょう。

ファイル名の変更も「git mv」コマンドで変える事ができます。
では「index.html」ファイルを「index_mv.html」と変えてみましょうか。

$ git mv index.html index_mv.html
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD ..." to unstage)

    renamed:    index.html -> index_mv.html
$ ls
index_mv.html

どうですか?変わりましたよね^^

このように「git mv」を使うと、移動・変更ができるので、しっかりと覚えてもらえればと思います。

ポイント
  • mvコマンドを使うとGitが認識できない
  • ファイルの移動は「git mv」コマンドを使って、Gitに移動したことを教える

ファイルの削除をしてみよう

どうも、cocomaruです。

今回はGitでのファイルの移動と削除について説明します。
まずはファイルの移動からですね!

git rm <削除対象ファイル>

こちらもLinuxコマンドの「rm」と似てますが、上述の「git mv」と同じで、Gitで管理されるかどうかの違いになります。

ではこちらもコマンドを実行して、動きを確認してみましょう。

…と、その前に「git mv」の説明でファイル名が変更されているので、元に戻しておきましょうか。

$ git reset HEAD index_mv.html
$ git reset HEAD index.html
$ git checkout --  index.html
$ rm index_mv.html

さて、これでリポジトリが最新の状態に戻ったので、削除をしていきましょう。

$ git rm index.html
rm 'index.html'
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD ..." to unstage)

    deleted:    index.html

ファイルの削除は上記のように簡単に実行できます。

ではまだ説明したい使い方があるので、一旦戻します。

$ git reset HEAD index.html
$ git checkout -- index.html 

git rm -cached <ファイル名>

次はリポジトリのファイルのみ削除する方法を説明します。

作業用ディレクトリのファイルは残しておきたいけど、リポジトリの中のデータは消したい、という場合もあるかと思います。

例えば、データベースへ接続するユーザ名やパスワードを管理しているファイルを間違えてリポジトリにコミットしてしまったので削除したいけど、ローカルPCで作業はしたいからファイルは残しておきたい。
と言ったケースです。

そういった時に使えるのが「git rm -cached」になります。

実際に実行してみると以下の形になるかと思います。

$ git rm --cached index.html
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD ..." to unstage)

    deleted:    index.html

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

    index.html
$ ls
index.html

リポジトリのデータを消すため「deleted: index.html」と表示されてますが、
「Untracked files:」と「index.html」ファイルが作業用ディレクトリにある状態になっているかと思います。

「git rm –cached」をすることによって、Git上では削除対象となり、「index.html」が管理から外れた状態になったことを示しています。

以上で削除方法の説明を終わります。

ポイント
  • 「git rm」でファイルを削除できる
  • リポジトリのデータだけ削除したい場合、「git rm –cached」を使う

ファイル移動と削除はコミットするまで反映されない

今回、繰り返し説明をしたかったので、「git mv」や「git rm」を実行後、「reset」「checkout」で元に戻してましたが、
コミットしないとGit上ではファイルの移動や削除の操作はリポジトリへ反映されない為、ご注意ください。

では最後に削除の操作を取り消しておきます。

$ git reset HEAD index.html
$ git checkout -- index.html 

cocomaru
今日の説明はどうだった?特に難しかった事はなかったでしょ?
hiromin
うん…
cocomaru
(あれ、何かいつもと違って元気がない…)どうした?分からない処あった?
hiromin
…ちがえた…
cocomaru
え?
hiromin
間違えたぁぁぁぁ…!!間違えてファイルを削除しちゃったぁぁぁ゜゜(´□`。)°゜。ウァァァン
cocomaru
ま、まじか…さっき教えた通り、resetとかしなかったの?
hiromin
うん…ごめんなさい…
cocomaru
そっか(汗)大丈夫!Gitでは削除した操作は取り消す事もできるから!
hiromin
え?ほ、ほんと?!
cocomaru
ほんとだって^^じゃあせっかくの機会だから、次回は変更した内容の取り消し方法について、いくつか方法を教えるね!
hiromin
(/ω\*)ウゥ…お願いします…

さて、hirominは間違えて説明中にファイルの削除をコミットしてしまったらしいですが、
みなさんは大丈夫でしたでしょうか?(^_^;)

もし「間違えてコミットしてしまった…」という方がいらっしゃっても大丈夫です!

Gitでは変更した内容を取り消す方法がありますので、次回は一緒に変更内容の取り消しの方法をみていきましょう^^

ではまた次回もお願いします!

Git入門#08(変更を取り消してみよう)

2018.08.01








コメントを残す

メールアドレスが公開されることはありません。