チュートリアルしてみた
これ、なかなかにアレゲ。別途開催予定のソレでも使えるのかどうか。ちょい難易度高いカンジもしますが以下にて動作確認を。
ひとまづ
リポジトリを作成。
$ mkdir git-tutorial $ cd git-tutorial $ git init Initialized empty Git repository in /Users/rms/tmp/git-tutorial/.git/
で、作成直後に status を確認しています。このコマンドの出力の意味を知っておくのは確かにポイント高いですね。
$ git status # On branch master # # Initial commit # nothing to commit (create/copy files and use "git add" to track)
この時点ではディレクトリの中に .git しかないのでこんな状態です。
とりあえず README.md を作成して status 再度確認。
$ touch README.md $ git status # On branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # README.md nothing added to commit but untracked files present (use "git add" to track)
状態は変わりました。Untracked なファイルがあり、git add で云々、と出力されてます。
ステージング
リポジトリの管理対象とするために git add でステージング領域の登録、とのこと。濱野さんの入門 Git で言うワークツリーからインデクスへの登録、にあたります。
$ git add README.md $ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: README.md #
Changes to be committed に README.md がある事を確認。
commit 作成
インデクスの状態をリポジトリに登録して歴史を作るのが commit という行為です。一発目は -m 付きでした。
$ git commit -m "First commit" [master (root-commit) bc226ee] First commit 0 files changed create mode 100644 README.md
git log
ファイル名を引数に、というのは知りませんでした。また、差分も確認したい場合は -p 付けれ、とありますね。この時点では差分が見れないだけにアレ。
git diff
ここで歴史を一歩すすめて云々しているので直前のソレも確認してみることに。
まず README.md を以下に、とのこと。
cat README.md # Git Tutorial
で、git diff してみます。
$ git diff diff --git a/README.md b/README.md index e69de29..f6cfe9a 100644 --- a/README.md +++ b/README.md @@ -0,0 +1 @@ +# Git Tutorial
ステージング領域への登録をしていないのでこのような出力、とのこと。ステージングしてあげるとどうなるかというと
$ git add README.md
基本的に git diff はワークツリーとステージ領域の状態の差分を出力するため、何も出ないということになる模様。つうかワークツリーとステージ領域、の記述って (何
$ git diff $
最新 commit との差分は git diff HEAD とあります。
$ git diff HEAD diff --git a/README.md b/README.md index e69de29..f6cfe9a 100644 --- a/README.md +++ b/README.md @@ -0,0 +1 @@ +# Git Tutorial
ぼくは --cached を使ってますね。
$ git diff --cached diff --git a/README.md b/README.md index e69de29..f6cfe9a 100644 --- a/README.md +++ b/README.md @@ -0,0 +1 @@ +# Git Tutorial
とりあえずここで一旦エントリ投入。別途ながらで進めつつ追記の方向です。
続き
とりあえずインデクスに登録して diff も確認したので commit を作ります。
$ git commit -m "Add index" [master 9441638] Add index 1 file changed, 1 insertion(+)
ログ確認。
$ git log commit 94416381367657d2f55bcfa4f6545c0892d6ce03 Author: YAMANE Toshiaki <yamanetoshi@gmail.com> Date: Tue Sep 3 09:09:04 2013 +0900 Add index commit bc226ee2d5c0245c698d76735b84b2ebabf7fc5c Author: YAMANE Toshiaki <yamanetoshi@gmail.com> Date: Tue Sep 3 08:06:15 2013 +0900 First commit
- p とかも確認してみます。
$ git log -p commit 94416381367657d2f55bcfa4f6545c0892d6ce03 Author: YAMANE Toshiaki <yamanetoshi@gmail.com> Date: Tue Sep 3 09:09:04 2013 +0900 Add index diff --git a/README.md b/README.md index e69de29..f6cfe9a 100644 --- a/README.md +++ b/README.md @@ -0,0 +1 @@ +# Git Tutorial commit bc226ee2d5c0245c698d76735b84b2ebabf7fc5c Author: YAMANE Toshiaki <yamanetoshi@gmail.com> Date: Tue Sep 3 08:06:15 2013 +0900 First commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29
これ、規模が大きくなってくるとかなり辛そうですね。
branch
そろそろハードルが高くなってくる模様。branch に関する Git の操作、とのこと。とりあえず master のみ、の状態を確認。
$ git branch * master
次に branch を作成して checkout とのこと。使うコマンドは一発モノのようです。
$ git checkout -b feature-A Switched to a new branch 'feature-A'
これは以下を実行したのと同様、とのこと。
$ git branch feature-A $ git checkout feature-A
状態確認。
$ git branch * feature-A master
'*' が付いてる方がカレントな branch とのこと。git add とか git commit などのコマンドについては current branch に対する操作となります。
ということで README.md に一行追加。
$ echo '- feature-A' >>README.md $ cat README.md # Git Tutorial - feature-A
追加したので commit を作りましょう、とのこと。
$ git add README.md $ git commit -m "Add feature-A" [feature-A ee12f91] Add feature-A 1 file changed, 1 insertion(+)
これで master を checkout して README.md の中身を確認しています。
$ git checkout master Switched to branch 'master' $ cat README.md # Git Tutorial
で、再度 feature-A に戻ります。ハイフンな checkout は知りませんでした。
$ git checkout - Switched to branch 'feature-A' Toshiakis-MacBook-Air:git-tutorial rms$ cat README.md # Git Tutorial - feature-A
直前に居た branch への checkout は簡単にできるようになっているのですね。
つうかこのあたりから核心部分なのであればロギングは止めた方が良いのかな。
続き
実は某所にて開催予定のソレに大枠を使わせてもらいたいな、と思っていたり (何
ざくっと控えのみ残させて頂きます。
- git reflog で確認できる commit は git reset --hard で復帰できるのか、知らなんだ
- conflict した時は解消して add 後の commit は -m 付けない方が良さげ
- git commit --amend もチュートリアル的には欲しい件
- 無論、rebase も用途限定でチュートリアルには必要ですね
つうか、rebase -i の fixup と squash の差って? って思ったら fixup はログはステます、って意味になるのかな。ちょっとよくわからない。squash する時はログも抹消してたんですが、この使い方がダウトなのかどうか。