Furudateのブログ

プログラミングやネットワーク系の知識・技術がメインのブログ。技術メモ帳的な感じになるかと。岩手から発信していきます。

【Git】GitやGitHubでよく使うコマンド一覧

こんばんは。

今回はGitやGitHubでよく使いそうなコマンドをまとめておきます。
自分のメモ的な意味合いもありますが、これさえ覚えておけば基本的な部分は全部出来るようにしたいと思います。

絶対に使うコマンド

git init

まずはこれ。基本ですね。リポジトリを作成し、.git ディレクトリを作成します。

git clone "URL"

既存のリポジトリをクローンします。この場合はinitを行う必要はありません。


git remote add origin "URL"

リモートリポジトリに対し、後述するpushやpullをするときにいちいちURLを打つのは非常に面倒なので、このコマンドでリモートリポジトリに対し名前を付けます。
普通はoriginとします。なお、cloneしたときは自動でoriginという名前が付けられます。


git status

変更が加えられたファイルの状態を表示します。

git add ファイル名

コミットするファイルを指定(ステージング)します。
「git add .」で新規作成された、もしくは変更されたファイルをaddします。削除されたファイルはaddしません。
「git add -u」は、一つ前と最新のステージを比較して、変更があった部分のみをaddします。新しく追加されたファイルはaddしません。
「git add -A」は上記2つを組み合わせたものです。新規作成、修正、削除全てのファイルをaddします。
uはupdate, aはallですね。

git rm ファイル名

ファイルを削除する。
ディレクトリの中を再帰的に削除する場合は

git rm -r ディレクトリ名

とする。また、ハードディスク上にはファイルを残しておきたいが、ステージングエリアから除外したい場合は、

git rm --chached ファイル名

とする。

git mv old.txt new.txt

old.txtからnew.txtにリネームする。
file.txt をdirディレクトリに移動するには、

git mv file.txt dir

とする。

git commit -m "メッセージ"

変更点をコミットします。「-m」オプションでターミナル上からメッセージを書けます。


git pull リモートリポジトリ名

リポジトリの変更点を、ローカルリポジトリにマージします。

git push リモートリポジトリ 送信するブランチ:送信先ブランチ

リモートリポジトリに自分のリポジトリの内容を送信します。
送信先ブランチを省略すると、送信するブランチと同じブランチを指定します。
また、送信先ブランチが存在しない場合は、新たに作成します。

git push -u origin master

ちなみに、上のようにuオプションを付けると、次回から git push だけで勝手に origin master でpushしてくれるようになるので便利です。

git push リモートリポジトリ :削除するブランチ

pushを応用し、送信するブランチを空にしてリモートのブランチを指定すると、リモートのブランチを空にする(削除する)ことが出来ます。


git remote

リモートリポジトリを表示します。
「-v」オプションでより詳細の情報を得られます。

git branch
git branch -a
git branch -d ブランチ名

現在のブランチの情報を表示したり、ブランチの作成を行います。
「-a」オプションをつけると、リモートのブランチも見ることが出来ます。
また、「-d」でブランチの削除が行えます。

git checkout
git checkout -b br1

ブランチの切り替えを行います。
「-b」オプションをつけると、指定したブランチを作成し、そちらに移動します。

git checkout . # カレントディレクトリに含まれる全てのファイルが対象
git checkout hoge.html # 特定のファイルが対象

checkoutを利用してこのように指定すると、指定したディレクトリやファイルを最後にコミットした時点まで戻すことが出来ます。
間違って変更を保存したときなどに便利です。

git merge ブランチ名

現在のブランチと指定したブランチのマージを行います。

よく使うコマンド

リポジトリの作成に関わるコマンド

git fsck --full

リポジトリの正当性チェックを行います。リポジトリが破損した場合に使います。
「--full」と付けることで完全なチェックを行います。

git gc

リポジトリ内の不要なオブジェクトを削除し、最適化を行います。
頻繁にやる必要はありませんが、大量にコミットやマージしたときとかにやると良いです。


リポジトリへのコミット関連

git diff

ファイルに加えられた変更点をdiff形式で表示します。
この場合は、変更はしたがステージング(git add)していないものを表示します。
「--cached」をつけると、これまでステージングされた一覧を見れます。

git log

コミットログを閲覧します。Qを打つと終了します。

git reflog

HEAD(ポインタ)の変遷を示します。つまり、コミットやmergeしたときのログを見ることが出来ます。

git reset
git reset --hard HEAD@{数字}

直前のコミットを取り消します。
また、git reflog で表示された履歴を参照しつつ、「--hard HEAD@{数字}」でそのときの状態に戻すことが出来ます。

git revert "コミット名"

指定したコミット時点の状態まで戻します。こちらは、戻したという情報が履歴に残ります。

git tag

コミットにタグを付けます。

ブランチの操作(コミット以外)

git show-branch

ブランチの作成、変更、マージの履歴表示を行います。

git stash
git stash list
git stash pop

現在の作業ツリーの状態を一時的に保存します。
作業中の状態をコミットせずに、他のブランチを触りたいときに利用します。
listを使うと、一時保存されている作業リストを確認できます。
popを使うと、別のブランチへチェックアウトしたときに再度一時保存したブランチを呼び出すことが出来ます。

git rebase ブランチ名

現在のブランチと指定したブランチとが分岐し始めたコミットを探し、そこから現在までの全てのコミットを指定したブランチに適応します。
mergeは、履歴までをマージしませんが、rebaseは全てをマージします。


mergeとrebaseの違いを図にすると以下のような感じです。

  • marge

f:id:Furu222:20131030211853p:plain

  • rebase

f:id:Furu222:20131030212015p:plain


ちなみに、マージ実行時に non fast-forward オプションをつけると、以下のようなブランチを作成することが出来ます。
f:id:Furu222:20131030212220p:plain


このオプションを付けないと、ブランチはただ以下のように移動するだけです。
f:id:Furu222:20131030212034p:plain


このオプションを付けることにより、ブランチが残るので履歴をたどりやすいです。

なお、mergeとrebaseの違いについては、こちらのサイトに詳しく書いてありますので、是非参照してください。


以上です。
また使いそうなコマンドが出てきたら追記していきたいと思います。

それでは。