裏紙に書く程度の内容

編集してみる - Git入門

Git入門の第3回目です。

前回まででリポジトリの作成、最初のコミットを行いました。

今回は実際にファイルを編集していきます。

目次はこちら

作業を進める

さっそく作業を進めていきます。

この時点ではgitは関係ありません。任意のエディタや開発ツールを使ってファイルを編集・保存します。

例として、以下の編集をしました。

  • test.txt に1行追加、
  • test2.txt を新たに作成

まぁ何の意味もない修正ですが・・・。実際はソースコードの編集と思っておいてください。

コミットする

続いてコミット。といいたいところですが、今回の編集ではファイルを追加したのでgit addが必要です。

確認してみましょう。

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   test.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       test2.txt
no changes added to commit (use "git add" and/or "git commit -a")

このようにgit statusを実行するとUntracked files:で、未管理のファイルを確認できます。

たくさんファイルを追加してどのファイルが新規なのかわからなくなった時なんかは便利そうですね。

また、作業が多岐にわたり新規にファイルを作成したのを忘れてしまっていることもあるでしょう。

追加した覚えはなくても、コミット前に必ずgit statusを実行してみる癖をつけておくといいでしょう。

今度こそコミットする

git statusで状態を確認したら、必要に応じたコマンドを実行します。

今回はgit addしてからgit commitですね。

$ git add ./
$ git commit -m '2nd commit'
[master 8d87e97] 2nd commit
 2 files changed, 4 insertions(+)
 create mode 100644 test2.txt

とまあ、2ファイルコミットできました。

git addでは追加するファイル名のところを./とました。これは現在のディレクトリを指すものです。

このように、addではディレクトリを指定することもでき、配下にあるファイル(この例では”test2.txt”)を全て追加します。

ログを見てみよう

ちょっとログを確認してみましょう。

ログの確認方法は前回もやりました、git logです。

$ git log
commit 8d87e9746f93667da4f964c61e5c3328c0942016
Author: hoge <hoge@example.com>
Date:   Mon Mar 13 16:53:25 2017 +0900

    2nd commit

commit 881b43274b99b368bbbad5f6bcf21e30396a6ee0
Author: hoge <hoge@example.com>
Date:   Mon Mar 13 14:13:14 2017 +0900

    initial commit

はい、今回のコミットもしっかりログに出てきますね。

しくった!やり直したい!

さて、先程コミットは無事終わりました。

本来の作業はこれでいいんですが、今は勉強中。コマンドをもう一度実行してみたい、っていう場合。

あるいは実際の作業中にも血迷ってコミットしてしまったものを元に戻したいって状況は発生しがちです。

もう一度コミットしようとすると、

$ git commit
# On branch master
nothing to commit, working directory clean

となり、コミットできません。

とりあえず前のコミットの状態に戻すにはresetを使います

$ git reset --hard HEAD~
HEAD is now at 881b432 initial commit

引数のHEAD~は「ひとつ前のコミット」を意味します。

※注意 上記コマンドは現在のコミットを完全になかったことにしてしまいます。つまり1つ前~現在のコミットまでの全ての作業を破棄してしまいます。実際の作業では特別な理由がない限り実行してはいけないコマンドです。

(今は勉強中なので)上記を実行したら、再度ファイルの編集・コミットをやってみてください。

HEADって?

HEADというものが出てきたのでついでに覚えておきましょう。

gitにおいてHEADとは、現在のブランチ上の最新のコミットを意味します。

また、上記のようにHEAD~で1つ前、HEAD~~~又はHEAD~3とすると3つ前のコミットという意味になります。

ときどき使うので覚えておきましょう。

コミットは戻さずに、作業前の状態に戻す

resetはコミット自体を戻すためのコマンドですが、コミットはそのままに作業前の状態に戻したいときがあります。

「何かいじくりまわしたけどうまくいかなかった。最初っからやり直したい!!」って時ですね。

この時はcheckoutが便利です。

ファイルを何か編集した状態で、statusを実行すると

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   test.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

と表示されます。実はここにcheckoutの説明が書いてありました。

(use "git checkout -- <file>..." to discard changes in working directory)

「”git checkout – …”で作業ディレクトリの変更を破棄します。」って書いてありますね。

<file>部分は目的のファイル名を指定します。

やってみましょう。

$ git checkout -- test.txt
$ git status
# On branch master
nothing to commit, working directory clean

元に戻りました。<file>部分はaddのコマンドと同じく、ディレクトリを指定してもOKです。

実際に編集したファイルを開いて、元に戻っていることを確認するといいでしょう。

--オプション

--オプションについての補足説明。

git checkout -- test.txtgit checkout test.txtと、--を省略しても同じ結果になります。

しかし、test.txtというとんでもないブランチ名があった場合。

ブランチの移動のコマンドはgit checkout test.txtとするのですが、ファイルのチェックアウトのコマンドと一緒になりますね。

gitはこのコマンドがブランチの移動なのか、ファイルのチェックアウトなのか判別できなくなります。(実際にはブランチへ移動してしまう)

これを避けるため、ファイルのチェックアウトの場合は--を使うわけですね。

※「ブランチ」についてはまだ何も説明していないので、今は「ファイルのチェックアウトは--を使うもんだ」と思っておいていただければOKです。


今回はここまで。

編集~コミットまでの作業の流れがわかったので、とりあえず開発の作業は進められそうですね。

さらに、ファイルを元に戻すこともできるようになったので、ファイルの編集前にいちいちバックアップを取る必要がなくなりました。

間違ってても作業前に戻すことが出来るので、「壊しちゃうかも」と心配する必要がなくなりました!

なにも恐れずに Let’s 編集!

広告
Index