2015年3月アーカイブ

git を使うようになってだいぶ経つんだけど、ちっとも使い方を覚えなくて、毎回検索してやり方を調べるようなことをしているので、いい加減まとめておくことにする。
主にsubversionとの比較で。

init

% git init
そのまま。subversionと一緒。
githubなんかと組み合わせて使うときは、github上でリポジトリを作ってからcloneするのが楽。
たぶんほとんどやらないけど、ファイルシステム上にリポジトリを作って他人とコラボレーションしようかな、とか言うときは--bareオプションをつける。

clone

どこか他にあるリポジトリをローカルに持ってくるのに使う。svn checkoutと一緒。

checkout

たぶんsubversionからの移行でいちばんわかりにくいコマンド。
% git checkout -b <branch>
新しいbranchを作成し、そのブランチに切り替える。svn copy と(ほぼ)同義。
% git checkout <branch>
ブランチに切り替える。svn switch相当。ってsvn switch使ったことないけど。
% git checkout <pathes>
ローカルの編集を取り消して、元に戻す。svn revert相当。ただし、後述のstageに乗っていないとき(git addしていないとき)

add

リポジトリにないファイルをstageに上げる(svn add相当)、もしくは修正したファイルをstageに上げる。(svn相当なし) あるいは、mergeでconflictしたファイルを修正して解決する(svn resolved相当)

commit

stageにあるファイルをcommitする。-aオプションをつけると、stageに上げるのとcommitを同時に行う。

fetch

リモートの変更をローカルに持ってくる。(svn相当なし)

merge

別のブランチの修正をカレントブランチにマージする。
オプションの違いについては図で分かるgit-mergeの--ff, --no-ff, --squashの違い - アジャイルSEを目指すブログに詳しい。

pull

fetch + merge(svn merge + commit相当)

push

ローカルリポジトリのcommitをリモートにpushする。(svn commit相当?)

status

状態を見る。(svn status相当)
% git status
On branch feature3 ←現在のブランチ
Changes to be committed: ←stageにあるファイル一覧
  (use "git reset HEAD ..." to unstage)

        new file:   test.txt

Changes not staged for commit: ←変更されたがstageに上がっていないファイル一覧
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

        modified:   README.md

Untracked files: ←リポジトリに追加されていないファイル一覧
  (use "git add ..." to include in what will be committed)

        test2.txt
-sbオプションをつけると、short formatで表示する。
% git status -sb
## feature3
 M README.md
A  test.txt
?? test2.txt
1行目は現在のブランチで、2行目以降にファイルリストが並ぶ。
1文字目がstageの状態、2文字目がunstageの状態。
文字の意味は、git status --helpで見られる。svnだとCがconflictだが、gitではCはcopied、Uがconflictになる。

diff

svn diff相当。subversionではrevision/changesetと言う考え方で、リビジョン番号で管理するが、gitはcommitで管理する。commitには1e53ba53322a3112eacc5b7813684bf19f28c6fdみたいなSHA-1 hashがつくので、hashで指定する。全部指定するのは面倒なので、頭4文字程度で指定することが可能(指定した文字数でcommitが一意に識別できる必要があるので、同じリポジトリに頭4文字が同じcommitがあると、もっと長い文字数を指定しないといけない)
diffの引数は、commitだったり、別のブランチだったり、いろいろできるのでgit diff --help参照。

log

svn log相当。
--graphをつけると、どのようなブランチを辿ってcommitされてきたのかをグラフで見ることができる。
--mergesをつけると、merge commitだけをフィルタして見ることができる。

show

git show commitで、特定のcommitのdiff(svnのchangeset)を見ることができる。

stash

現在の変更を、一時的に待避する。(svn相当なし)
stash popで待避したものを現在のカレントに適用する。
内部的には、stashもHEADを動かさないcommit?

tag

git tag -a tagname で、現在のワーキングツリーにタグを打つことができる。(tagnameの後にcommit を指定することも可能)

archive

svn export相当。(実際には、checkout-indexと言うコマンドもあり、そちらの方がsvn exportに近い)

取り消し

  1. 編集したファイルを取り消したい
    →git checkout ファイル名
  2. 編集した上にgit addした(stageに上げた)ファイルを取り消したい
    →git reset HEAD ファイル名
  3. commitを取り消したい
    →git reset --soft HEAD~ (ワークファイルは変更が加わったまま)
    →git reset --hard HEAD~ (ワークファイルもcommit前に戻る)
  4. commitをやり直したい
    →git commit --amend
  5. 複数のcommitをまとめたい
    →git rebase -i HEAD~n (ぐぐるとやり方がたくさん見つかる)
まだ書き途中。
commitの指定方法とか
remoteの指定方法とか
commitをまとめるとか
2015年3月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

このアーカイブについて

このページには、2015年3月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2014年12月です。

次のアーカイブは2015年5月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.1.1