Git基本

Last Update:2012/04/13

ほとんどがGit Cheet Sheetからの引用なのでLicense表示。

Git Cheet Sheet 日本語版

ライセンスは Creative Commons Attribution 3.0 Unported です。

Note

$idはブランチ名やコミットidを表す $fileはファイル名を表す $branchはブランチ名を表す

コミットする

git commit -m"first commit"

Note

-m”コメント”はどういう変更を行い、なぜその変更を行ったのか、他人にわかりやすく書こう。 3ヶ月後の自分は他人。

ファイルに対する変更を表示する

git diff

Note

git diff $id1 $id2とすればその2つの差分を示す。

コミットの内容を表示する

git show $id

Note

git show $id:$fileで特定$idのファイル$fileを表示

最後にコミットした状態に戻す

git reset --hard

Warning

hardリセットは取り消し不可。

指定したコミットを取り消す

git revert $id

Warning

revertはHEADから順に巻き戻していくこと。そうすれば不用意な競合に見舞われずに済む。

revertは即座にコミットされるが、一度に複数のコミットを巻き戻す場合は-nオプションをつけてやれば良い。 そうすると指定されたコミットが全てステージされ、明示的にgit commit を行った時に初めてコミットされる。

以下はその一例。

git revert -n HEAD
git revert -n 540ecb7
git commit -m "revert 45eaf98 and 540ecb"

最新コミットを修正する

git commit -a --amend

Note

壊れたファイルを修正した後に使う。

ブランチを作成する

git branch $new_branch $base_branch

ブランチを作ってそのブランチに移動する場合は以下。

git checkout -b $new_branch $base_branch

ブランチを移動する

git checkout $branch

ブランチをマージする

先にマージされたいブランチに移動する。 以下は$branch2を$branch1にマージする例。

git checkout $branch1
git merge $branch2

ブランチを削除する

当然だが気を付けて使うこと。

git branch -d $del_branch

タグを削除する

git tag -d タグ名

リモートリポジトリのタグを削除する

ローカルのタグを削除してからそのタグだけをpushする。

git tag -d タグ名
git push git@github.com:hoge/projectname.git :タグ名

リポジトリから最新の変更を取得する

git fetch

Warning

取得した変更はマージされない。

git pull

Warning

取得した変更はマージされる。

マージの競合を確認する

git diff

Note

競合のあるファイルの差分全て。

git diff --base $file

Note

ベースファイルに対して。

git diff --ours $file

Note

あなたの変更に対して。

git diff --theirs $file

Note

他人の変更に対して。

gitでステージングしてしまった不要なファイルのaddを取り消す

git add .などで不要なファイルがtreeに入ってしまうことがある。 以下の操作でステージから削除する。

git reset HEAD ファイル名

ファイル名を指定しない場合はステージされている全てのファイルをステージから削除する。

リモートリポジトリからcloneする

githubやssh接続できるサーバに作成した作業ディレクトリを持たないリポジトリからcloneして持ってくる。

sshのポートは2222とする。

#sshの場合
git clone ssh://user@hoge.com:2222/home/user/git/test.git

#githubの場合
git clone git://user@github.com:user/test.git

master以外のブランチをcloneする場合には、以下の手順をとる。

#remoteブランチにどんなブランチがあるか確認する。
git branch -a
#ローカルにブランチ(cloneしたいリモートのブランチ名と同名で良い)を作りリモートのブランチを指定する。
git branch feature remotes/origin/feature
#また、同時にチェックアウトしてcloneしたブランチに移動する場合はcheckout -b を使えば良い。
git checkout -b feature remotes/origin/feature

ssh接続ができるサーバがある場合は比較的簡単かつ安全にgitを使うことができる。 一方、githubの場合、というか正確にはgit独自のプロトコルの場合は匿名であるというリスクが伴うので、通常、アクセス権は読み取り専用である。 そのためssh接続できるユーザで開発を行いつつ、cloneやpullはだれでもできるようにgitプロトコルを有効にしているリポジトリが多い。

Note

gitプロトコルではポート9418(TCP)を使う。よってファイアウォールの設定によっては使えないこともある。