使い始めるとき
リポジトリの作成
Gitで管理するようにディレクトリを初期化する。
リポジトリを作成するディレクトリにて次を入力。
git init
リポジトリのクローン
既存のリポジトリの続きから開発したい場合、既存リポジトリの内容を自分のリポジトリへコピーするのが、クローン。
リモートからクローンする場合。
$ git clone https://github.com/<userid>/<repo>.git
状況確認のコマンド
今の状態を確認
git status
ログを確認
git log
見にくい場合は、1コミット一行でログ表示する。コミットIDを確認したい場合にも便利。
git log --oneline
コミットログだけじゃなくて、より細かいHEADの辿った履歴をみたい場合。
git reflog
コンフィグ一覧
ユーザ名、メールアドレス、”origin”のエイリアスの確認をしたい場合。
git config
ブランチ一覧
ブランチの一覧と、現在使用しているブランチの確認をする場合。
git branch
ファイルの管理
indexに加える
作成/変更したファイルを、次回のコミット対象に加える作業が index。
git add <filename>
で、ファイルをindexに追加(stage)する。
indexから外す
git rm --cached <filename>
indexから消して、さらにファイルの実体も消す。
git rm -f <filename>
間違えてファイルを消した場合、コミット済みのファイルであれば、ここまでの編集内容を破棄し、コミット時まで戻すことでファイルを復元することもできる。
indexを元に戻す
indexにファイルを誤って追加した場合などにHEADの状態まで戻します。ワーキングツリーはそのまま。
git reset HEAD
ワーキングツリーを元に戻す
addしていないファイルの変更内容を破棄する場合。
git checkout -- <filename>
–なしで、git checkout <filename>としてもよいが、filenameと同一のブランチ名が存在すると、意図せずブランチが切り替わってしまうので注意する。<filename>を.とすると、全て戻す。
コミット後の変更を全て破棄する
ワーキングツリーとインデックスをHEADの位置に戻す。
git reset --hard HEAD
このあたりの細かい違いについては、次の記事が詳しい。
http://qiita.com/shuntaro_tamura/items/db1aef9cf9d78db50ffe
ローカルへの記録
コミット
コミットメッセージは3行で書く。慣習上、1行目には変更箇所、3行目には変更理由を書く。
-m オプションを2つ使うと、一つ目が一行目、二つ目が三行目に入る。
git commit -m "<変更箇所>" -m "<変更理由>"
コミットの取り消し
git reset --soft HEAD^
ブランチ
既存のブランチを確認
git branch
ブランチを作成
git branch <新規ブランチ名>
ローカルでブランチを作成した場合も、プッシュしなければリモートには作成されません。
新規ブランチをリモートへプッシュする
git push origin <新規ブランチ名>
ブランチを削除
git branch -d <ブランチ名>
ブランチの移動
git checkout <ブランチ名>
ブランチを作成して移動
git branch <新規ブランチ名> + git checkout<新規ブランチ名>を一気に行う場合
git checkout -b <新規ブランチ名>
リモートとのやり取り
リモートへ反映させる(プッシュ)
ローカルでのコミット内容をリモートへ反映させる。
git push origin <ブランチ名>
ブランチ名にはmasterなどを入れる。masterに反映させる場合は省略して、
git push
とすることもできる。
origin というのは、リモートレポジトリのurlのエイリアス。
git config
でoriginの設定内容を確認できる。git cloneした場合は、自動で設定されている。
自分でoriginを設定したい場合は、
git remote add origin <url>
プッシュできない
プッシュできるのは、リモートの当該ブランチがpushするコミットまで fast-forwardできる場合のみ。
リモートブランチが変更されている場合は、マージしてから、pushし直す。
リモートの内容をローカルへ反映させる(プル)
git pull
git pull は、git fetch + git merge をしたのと同じ効果を持ちます。
競合しており、自動でマージ出来ない場合は、手動で競合を解決します。
- 競合しているファイルを編集します。
- git add <filename>で競合が解決したファイルをindexします。
- 変更内容をcommitします。
すると、競合が解決されたコミットが作成され、pushできるようになります。