git を使うようになってだいぶ経つんだけど、ちっとも使い方を覚えなくて、毎回検索してやり方を調べるようなことをしているので、いい加減まとめておくことにする。
主にsubversionとの比較で。
githubなんかと組み合わせて使うときは、github上でリポジトリを作ってからcloneするのが楽。
たぶんほとんどやらないけど、ファイルシステム上にリポジトリを作って他人とコラボレーションしようかな、とか言うときは--bareオプションをつける。
オプションの違いについては図で分かるgit-mergeの--ff, --no-ff, --squashの違い - アジャイルSEを目指すブログに詳しい。
1文字目がstageの状態、2文字目がunstageの状態。
文字の意味は、git status --helpで見られる。svnだとCがconflictだが、gitではCはcopied、Uがconflictになる。
diffの引数は、commitだったり、別のブランチだったり、いろいろできるのでgit diff --help参照。
--graphをつけると、どのようなブランチを辿ってcommitされてきたのかをグラフで見ることができる。
--mergesをつけると、merge commitだけをフィルタして見ることができる。
stash popで待避したものを現在のカレントに適用する。
内部的には、stashもHEADを動かさないcommit?
commitの指定方法とか
remoteの指定方法とか
commitをまとめるとか
主に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-sbオプションをつけると、short formatで表示する。..." 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
% git status -sb ## feature3 M README.md A test.txt ?? test2.txt1行目は現在のブランチで、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に近い)取り消し
- 編集したファイルを取り消したい
→git checkout ファイル名 - 編集した上にgit addした(stageに上げた)ファイルを取り消したい
→git reset HEAD ファイル名 - commitを取り消したい
→git reset --soft HEAD~ (ワークファイルは変更が加わったまま)
→git reset --hard HEAD~ (ワークファイルもcommit前に戻る) - commitをやり直したい
→git commit --amend - 複数のcommitをまとめたい
→git rebase -i HEAD~n (ぐぐるとやり方がたくさん見つかる)
commitの指定方法とか
remoteの指定方法とか
commitをまとめるとか
カテゴリ
gitトラックバック(0)
このブログ記事を参照しているブログ一覧: git の基本
このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/3228
コメントする