もう何度目の再入門か分からないgit。
実際のところ、普段はGUIクライアントから使っていて、それほど困ってはないのですが、やっぱりちゃんと理解した上でコマンドラインからも使えるようになりたい。
というわけで、いい加減忘れないように忘備録をまとめながら学習。
参考にしたのはTravis Swicegood著 でびあんぐる監訳 「入門Git」。
読みやすいので文字通り入門には最適だと思います。あとはGoogle先生も。
リベースとか、触れてないトピックもあるけど、それはおいおい。
Gitの設定
git config --global user.name "[自分の名前]"
git config --global user.email "[自分のメールアドレス]"
コミットしたときに表示される自分の名前とメールアドレスを設定。
「このプログラムを作ったのは誰だあっ」
リポジトリの作成など
git init
リポジトリを作成する。
管理対象にしたくないファイルを.gitignoreに書く。
giboというツールを使って生成するのがいいようだ。
brew install gibo
gibo java > .gitignore
giboをインストールして、Javaプロジェクト向けの.gitignoreを生成。
gibo -l
何を指定可能かはこれで確認。
コミットするまで
編集したファイルを「ステージ」し、「コミット」する。という流れ。
二度手間っちゃそうだけど、「ステージングエリアのおかげで本当に作りたいコミットを練り上げる事ができる」とのこと。
git add [ファイルパス]
指定したファイルをステージ。
git add -i
対話モードでのステージング操作。
ファイルを一覧から選んでステージしたり、ステージから外したり。
対話モードから呼べる「パッチモード」を利用すると、ハンク(ファイル内の変更箇所)毎にステージするかどうかを選べる。
git add -p
パッチモードを直接起動するならこう。
git commit
ステージされた変更内容をコミット。
-m オプションでメッセージを指定。指定しなければエディタが起動。
使うエディタの指定はgit config --global core.editor
で。
メッセージは1行目に要約。それ以降に詳細を書くべし。
コミットの一覧を参照するとき、1行目の内容が見出しとして表示されるので。
git commit -a
追跡中のファイルに変更があれば自動でステージしてコミット。
追跡してないファイルはあらかじめaddしておく必要がある。
git commit [ファイルパス]
ファイルを指定してコミット。
git commit --amend
直前のコミットをやり直し。
「あ、インデント揃ってねえ。直すのは簡単だけど独立したコミットにするのはカッコ悪いなあ。。。」というとき。
現在の状態を確認
git status
現在の作業ツリーの状態を確認。
変更されてるファイルはどれで、ステージされてるファイルはどれで。。。という情報。
git diff
ステージしていない変更の差分を確認。
ステージングエリアと作業ツリーの差分。
git diff --cached
リポジトリとステージングエリアの差分を確認。
git diff HEAD
リポジトリと作業ツリーの差分を確認。
現在作業しているブランチに対する直近のコミット。
ファイル削除、ファイル名変更・移動
git rm [ファイルパス]
リポジトリからファイルを削除。作業ツリーからも削除される。
-r
オプションをつけるとディレクトリごと削除。
--cached
をつけると、作業ツリーにファイルを残す。
git mv [現ファイルパス] [新ファイルパス]
ファイル名変更。ファイル移動もこれ。
古いファイルのgit rmと、新しいファイルのgit addを行ってくれる。
履歴を確認
git log
履歴を確認。
git log -10
最近10個。
git log --since="5 hours"
最近5時間。
git log --pretty=oneline
各コミットを1行で表示。
ほかにもいろいろ。詳しくはマニュアルページで。
ブランチ関係
git branch [ブランチ名]
新しいブランチを作る。
git branch -d [ブランチ名]
ブランチを削除。
git banch -m [現ブランチ名] [新ブランチ名]
ブランチ名を変更。
git branch
ブランチを一覧表示。
git checkout [ブランチ名]
作業するブランチを切り替え。
git checkout [ブランチ名] -b
ブランチを作って今すぐ切り替え。
git merge [ブランチ名]
指定したブランチを、現在のブランチへとマージ。
git merge --squash [ブランチ名]
指定したブランチからすべてのコミットを取ってきて1つのコミットに圧縮し、現在のブランチへマージ。
git mergetool
競合を解決するためのツールを起動。
変更を元に戻す
git checkout [ファイルパス]
指定したファイルの、作業ツリーでの変更をなかったことに。
git checkout .
すべてのファイルの、作業ツリーでの変更をなかったことに。
git revert -n [コミット]
指定したコミットを取り消す新しいコミットを作る。
-n
をつけないと、すぐにコミットまで行われる。
git reset --soft [コミット]
指定したコミットで施された変更をステージングエリアに戻して、コミットされてない状態に戻す。
--soft
ではなく--hard
を指定すると、作業ツリーからも変更内容が失われる。
リモートリポジトリ
ssh-keygen -t rsa
Gitそのものの話題からは外れるけど。。。あらかじめ、SSH鍵を生成しておく。
ホームディレクトリの.ssh/id_rsa.pubに公開鍵が作られるので。GitHubであれば「Personal Settings」「SSH and GPG keys」に登録。
'git clone [リモートリポジトリURL]'
リモートリポジトリのクローンを作る。
すでに進行しているプロジェクトがあるなら、この方法。
git remote add origin [リモートリポジトリURL]
デフォルトのリモートリポジトリ(origin)を設定。
新しいプロジェクトを始めるならこっち。
git branch -r
リモートブランチの一覧を表示。
git push -u origin master
デフォルトのリモートリポジトリに、ローカルでのコミットを送信。
-u origin master
で、ローカルブランチをリモートブランチへ関連づける。初回のみ必要。
git push
2度目以降のプッシュはこれでOK。
git pull
デフォルトのリモートリポジトリからコミットを取得し、ローカルリポジトリにマージ。