More Related Content Similar to Gitのよく使うコマンド (20) Gitのよく使うコマンド2. よく使うコマンド
init add commit push clone branch
checkout fetch merge rebase pull
status rm reset remote tag log
mergetool revert
19個
3. init
現在の場所にリポジトリを作成する
mkdir foobar; cd foobar; git init
4. add
対象をバージョン管理に追加する
ワイルドカードを使う
git add **/*.php
強制的に追加
git add -f foobar.php
部分的に追加
git add -i foobar.php
5. commit
ローカルブランチへの反映
git commit
全部追加した上でコミットする(非推奨)
git commit -a
直前のコミットにコミットする
git commit --amend
6. commit
ローカルブランチへの反映
コミット時に起動するエディタは次の環境変数で指
定する
● GIT_EDITOR
● EDITOR
e.g.) export EDITOR=vim
エディタを起動せずにコミットする
git commit -m "message"
7. push
リモートサーバへの反映
git push <remotename> <refspec>
ローカルブランチと同名のブランチをリモート上に
作成する
git push <remote> <localbranch>
別名でpushする
git push <remote> <localbranch>:<remotebranch>
<refspec>は<localbranch>:<remotebranch>
8. push
リモートサーバへの反映
リモートブランチを削除する
git push --delete <remote> <branchname>
git push <remote> :<branchname>
プッシュしたリモートブランチをトラッキングする
git push -u <remote> <branchname>
強制的にプッシュ
git push -f <remote> <branchname>
9. push
リモートサーバへの反映
タグをプッシュする
git push --tags <remote>
リモートサーバのタグを削除する
git push --delete <remote> tag_name
git push <remote> :tag_name
10. push
注意事項
git push(remoteとブランチの指定なし)はトラッキ
ングしているローカルブランチを全てプッシュしてし
まうので、とても危険です
デフォルトではcurrent branchだけプッシュするよう
にする設定で安全運用
git config --global push.default upstream
11. clone
リポジトリのコピーを作成する
sshを利用
git clone ssh://[user@]host[:port]/path/to/repo.git/
git clone [user@]host:path/to/repo.git/
httpsを利用
git clone http[s]://host[:port]/path/to/repo.git/
ローカル
git clone [file://]/path/to/repo.git/
12. branch
ローカルブランチを作成/削除する
ローカルブランチの一覧
git branch
リモートブランチの一覧
git branch -r <remote>
全てのブランチの一覧
git branch -a
13. branch
ローカルブランチを作成/削除する
ローカルブランチの作成
git branch <branchname>
ローカルブランチの削除
git branch -d <branchname>
git branch -D <branchname>
リモートブランチの削除
git branch -r -d <remote>/<branchname>
14. branch
ローカルブランチを作成/削除する
ブランチの移動(名前変更)
git -m <oldbranch> <newbranch>
git -M <oldbranch> <newbranch>
トラッキング先を設定する
git branch --set-upstream <local_branch>
<remote_branch>
これをするとgit push/pullの時にリモートブランチ名
を指定しなくても、設定したブランチに対して実行し
てくれます。
15. checkout
ブランチを取得する
git checkout <branch>
ブランチを作成してチェックアウト
git checkout -b <newbranch> [<startpoint>]
リモートブランチのトラッキングブランチを作成してチェックアウト
git checkout -t <remote>/<branch>
コミット前の変更を取り消す
git checkout <path> ...
16. fetch
リモートの状態を更新する
git fetch <remote>
全てのリモートブランチを更新する
git fetch --all
更新後に、リモートサーバ上に存在しないリモート
ブランチを削除する
git fetch ( -p | --prune )
17. merge
ブランチを取り込む
git merge <branch>
fast-forwardしない
git merge --no-ff <branch>
マージのログを1つに圧縮する
git merge --squash <branch>
18. merge
fast-forwardとは
通常はこうなる1つのコミットとして扱われる
A---B---C topic
/
D---E---F---G---H master
fast-forwardではログを先頭にくっつけてマージす
る
A---B---C topic
/
D---E---F---G---A'---B'---C' master
19. merge
fast-forwardとは
topicのなかにmasterの変更が全て入っている場
合、これをfast-forwardな関係と言います。
C---D---E topic
/
A---B master
この状態でマージを行うと、次のようになります。
A---B---C---D---E master, topic
20. merge
fast-forwardとは
逆にtopicのなかにmasterの変更が全て入っていない場合、
fast-forwardな関係にはなりません。
C---D---E topic
/
A---B---F---G master
この状態でマージを行うと、コミットマージが作られて、次のよう
になります。
C---D---E topic
/
A---B---F---G---H master
# SVNはこの形ですね
21. merge
squashとは
squashはマージですが、通常のコミットとして扱います。
C---D---E topic
/
A---B---F---G master
例えば上記の状態で、git merge --squash topicとすると下記の
状態になります
C---D---E topic
/
A---B-------------F master
FにはC, D, Eの変更が含まれています
22. merge
fast-forwardかno-ffかsquashか
リポジトリの運用ポリシーにより使い分ける
ffの場合ログが汚染され、機能追加やバグ修正のコミットがどこ
からどこまでなのか分かりづらくなるたね、個人的no-ffだけで
運用して問題ないと思っています。
A successful Git branching model でもno-ffが推奨されてるよ!
邦訳: http://goo.gl/xFd5g
23. rebase
ブランチを統合する
git rebase <branch>
次の状態が
C---D---E topic
/
A---B---F---G master
こうなります
C'---D'---E' topic
/
A---B---F---G master
24. rebase
コンフリクトが発生したら
rebase中にコンフリクトが発生した場合、rebaseが中断され、コ
ンフリクト解決フェイズになります。
解決処理後、rebaseを再開するか中断するかそのコミットをス
キップするか選択します。
マージコミットを作成して再開
git rebase --continue
中断
git rebase --abort
今のパッチをスキップして再開
git rebase --skip
25. rebase
履歴を改竄する
過去のコミットを分割したりまとめたりできます。
基本的にはサーバにプッシュする前に、ログを綺麗にするため
に使います。
rebase -i <commit>
サーバにプッシュ後は、他のブランチのマージやリベースの関
係が崩れる恐れがあるので、絶対に行ってはいけません
26. pull
fetch & merge
git pull [<remote>] [<branch>]
次の2つは等価です
git pull origin master
git fetch origin && git merge origin/master
次の設定をしていると、git pullだけで<remote>と<branch>
を自動解決してくれます。
git branch --set-upstream <localbranch>
<remote>/<remoptebranch>
27. pull
fetch & rebase
mergeの代わりにrebaseを使うこともできます。
git pull --rebase <remote> <branch>
git pull --rebaseは1.7.2で導入されたもので、比較
的新しいオプションです。
今まではmergeしか選択できませんでしたが、これ
にはいくつかの問題がありました。
28. pull
mergeで処理される問題
mergeとrebaseの違いは先程の説明通りです。
pullを行う目的は、リモートブランチの変更をトラッ
キングしているローカルブランチに取り込むことし
かありません。
つまりはローカルブランチの更新です。
ただ追跡しているだけなのに、マージコミットが作
成されると、タイムライン上はリモートブランチと
ローカルブランチは別物扱いとなってしまいます。
29. pull
いちいち--rebaseを打つのがメンドイ
メンドイのでデフォルトでrebaseを使うように設定します。
<branch>に対するpullでは--rebaseを行う
git config branch.<branch>.rebase true
トラッキングブランチの作成時の上記の設定を自動で付与する。
git config --global branch.autosetuprebase always
1.7.9以降の場合は次の設定も使える
git config --global pull.rebase true
この場合、git config branch.<branch>.rebase.falseとすると、
<branch>に対するpullだけはmergeで行われる。
30. status
現在のステージングの状態を見る
git status
慣れたら
git status -sb
31. rm
削除する
git rm <file>
ディレクトリを削除する
git rm -r <dir>
ステージングから削除する
git rm --cached <file>
32. reset
現在から過去を取り消す
直前のコミットをステージングの状態まで戻す
git reset --soft HEAD~
直前のコミットを完全に戻す
git reset [--mixed] HEAD~
直前のコミットを完全に戻して、untrackなものは削除する
git reset --hard HEAD~
<commit>まで戻す
git reset ( --soft | --mixed | --hard ) <commit>
33. reset
現在から過去を取り消す
直前のマージを取り消す
git reset --hard ORIG_HEAD
インタラクティブモードで部分的に戻す
git reset ( -p | --patch ) <commit>
34. remote
リモートの管理
リモートの追加
remote add <name> <url>
リモートの削除
remote rm <name>
リモートサーバ上に存在しないリモートブランチの削除
remote prune <name>
35. tag
タグの管理
タグの作成
git tag <tagname> [<commit>]
タグの削除
git tag -d <tagname>
署名付きタグの作成
git tag ( -s | -u <key_id> ) <tagname>
36. log
ログを見る
デフォルト
git log
ハッシュと派生したブランチを見やすくしたい
git log --oneline --decorate
変更されたファイルとパッチも表示しちゃう
git log --stat
git log --patch-with-stat
37. mergetool
ツールを利用したコンフリクトの解決
git mergetool
git config --global merge.toolで設定したツールで
3wayマージを行う。
38. revert
過去コミットを取り消す
git revert <commit>
過去のコミットを取り消すために、逆マージをしま
す。
resetやrebase -iと違い、歴史を改竄せずに、取り
消したというコミットを残します。
39. これでもまだほんの一部
1.7.11.3時点でのコマンド数: 152
add diff lost-found prune-packed shortlog add--interactive diff-files ls-files pull show am
diff-index ls-remote push show-branch annotate diff-tree ls-tree quiltimport show-index
apply difftool mailinfo read-tree show-ref archive difftool--helper mailsplit rebase stage
bisect fast-export merge receive-pack stash bisect--helper fast-import merge-base reflog
status blame fetch merge-file relink stripspace branch fetch-pack merge-index remote
submodule bundle filter-branch merge-octopus remote-ext svn cat-file fmt-merge-msg
merge-one-file remote-fd symbolic-ref check-attr for-each-ref merge-ours remote-ftp tag
check-ref-format format-patch merge-recursive remote-ftps tar-tree checkout fsck merge-
resolve remote-http unpack-file checkout-index fsck-objects merge-subtree remote-https
unpack-objects cherry gc merge-tree remote-testgit update-index cherry-pick get-tar-
commit-id mergetool repack update-ref clean grep mktag replace update-server-info
clone hash-object mktree repo-config upload-archive column help mv request-pull
upload-pack commit http-backend name-rev rerere var commit-tree http-fetch notes
reset verify-pack config http-push p4 rev-list verify-tag count-objects imap-send pack-
objects rev-parse web--browse credential-cache index-pack pack-redundant revert
whatchanged credential-cache--daemon init pack-refs rm write-tree credential-store init-
db patch-id send-pack daemon instaweb peek-remote sh-i18n--envsubst describe log
prune shell
42. ._
\ヽ, ,、
`''|/ノ
.|
_ |
\`ヽ、|
\, V
`L,,_
|ヽ、) ,、
/ ヽYノ
/ r''ヽ、.|
| `ー-ヽ|ヮ
| `|
|. |
ヽ、 |
ヽ____ノ
/_ノ ' ヽ_\
/(≡) (≡)\
/::::::⌒(__人__)⌒::::: \
| |r┬-| |
\ `ー'´ /
/ \
( | | )
\| э |/
( ,,,, ,ノ
\ 、(U)ノ ノ
\/ / ┼ヽ -|r‐、. レ |
/ /\ d⌒) ./| _ノ __ノ