Gitのよく使うコマンド

99,370
-1

Published on

Published in: Technology
0 Comments
52 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
99,370
On Slideshare
0
From Embeds
0
Number of Embeds
37
Actions
Shares
0
Downloads
205
Comments
0
Likes
52
Embeds 0
No embeds

No notes for slide

Gitのよく使うコマンド

  1. 1. Gitのよく使うコマンド
  2. 2. よく使うコマンドinit add commit push clone branchcheckout fetch merge rebase pullstatus rm reset remote tag logmergetool revert 19個
  3. 3. init 現在の場所にリポジトリを作成するmkdir foobar; cd foobar; git init
  4. 4. add 対象をバージョン管理に追加するワイルドカードを使うgit add **/*.php強制的に追加git add -f foobar.php部分的に追加git add -i foobar.php
  5. 5. commit ローカルブランチへの反映git commit全部追加した上でコミットする(非推奨)git commit -a直前のコミットにコミットするgit commit --amend
  6. 6. commit ローカルブランチへの反映コミット時に起動するエディタは次の環境変数で指定する● GIT_EDITOR● EDITORe.g.) export EDITOR=vimエディタを起動せずにコミットするgit commit -m "message"
  7. 7. push リモートサーバへの反映git push <remotename> <refspec>ローカルブランチと同名のブランチをリモート上に作成するgit push <remote> <localbranch>別名でpushするgit push <remote> <localbranch>:<remotebranch><refspec>は<localbranch>:<remotebranch>
  8. 8. push リモートサーバへの反映リモートブランチを削除するgit push --delete <remote> <branchname>git push <remote> :<branchname>プッシュしたリモートブランチをトラッキングするgit push -u <remote> <branchname>強制的にプッシュgit push -f <remote> <branchname>
  9. 9. push リモートサーバへの反映タグをプッシュするgit push --tags <remote>リモートサーバのタグを削除するgit push --delete <remote> tag_namegit push <remote> :tag_name
  10. 10. push 注意事項git push(remoteとブランチの指定なし)はトラッキングしているローカルブランチを全てプッシュしてしまうので、とても危険ですデフォルトではcurrent branchだけプッシュするようにする設定で安全運用git config --global push.default upstream
  11. 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. 12. branch ローカルブランチを作成/削除するローカルブランチの一覧git branchリモートブランチの一覧git branch -r <remote>全てのブランチの一覧git branch -a
  13. 13. branch ローカルブランチを作成/削除するローカルブランチの作成git branch <branchname>ローカルブランチの削除git branch -d <branchname>git branch -D <branchname>リモートブランチの削除git branch -r -d <remote>/<branchname>
  14. 14. branch ローカルブランチを作成/削除するブランチの移動(名前変更)git -m <oldbranch> <newbranch>git -M <oldbranch> <newbranch>トラッキング先を設定するgit branch --set-upstream <local_branch><remote_branch>これをするとgit push/pullの時にリモートブランチ名を指定しなくても、設定したブランチに対して実行してくれます。
  15. 15. checkout ブランチを取得するgit checkout <branch>ブランチを作成してチェックアウトgit checkout -b <newbranch> [<startpoint>]リモートブランチのトラッキングブランチを作成してチェックアウトgit checkout -t <remote>/<branch>コミット前の変更を取り消すgit checkout <path> ...
  16. 16. fetch リモートの状態を更新するgit fetch <remote>全てのリモートブランチを更新するgit fetch --all更新後に、リモートサーバ上に存在しないリモートブランチを削除するgit fetch ( -p | --prune )
  17. 17. merge ブランチを取り込むgit merge <branch>fast-forwardしないgit merge --no-ff <branch>マージのログを1つに圧縮するgit merge --squash <branch>
  18. 18. merge fast-forwardとは通常はこうなる1つのコミットとして扱われる A---B---C topic / D---E---F---G---H masterfast-forwardではログを先頭にくっつけてマージする A---B---C topic / D---E---F---G---A---B---C master
  19. 19. merge fast-forwardとはtopicのなかにmasterの変更が全て入っている場合、これをfast-forwardな関係と言います。 C---D---E topic /A---B masterこの状態でマージを行うと、次のようになります。A---B---C---D---E master, topic
  20. 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. 21. merge squashとはsquashはマージですが、通常のコミットとして扱います。 C---D---E topic /A---B---F---G master例えば上記の状態で、git merge --squash topicとすると下記の状態になります C---D---E topic /A---B-------------F masterFにはC, D, Eの変更が含まれています
  22. 22. merge fast-forwardかno-ffかsquashかリポジトリの運用ポリシーにより使い分けるffの場合ログが汚染され、機能追加やバグ修正のコミットがどこからどこまでなのか分かりづらくなるたね、個人的no-ffだけで運用して問題ないと思っています。A successful Git branching model でもno-ffが推奨されてるよ!邦訳: http://goo.gl/xFd5g
  23. 23. rebase ブランチを統合するgit rebase <branch>次の状態が C---D---E topic /A---B---F---G masterこうなります C---D---E topic /A---B---F---G master
  24. 24. rebase コンフリクトが発生したらrebase中にコンフリクトが発生した場合、rebaseが中断され、コンフリクト解決フェイズになります。解決処理後、rebaseを再開するか中断するかそのコミットをスキップするか選択します。マージコミットを作成して再開git rebase --continue中断git rebase --abort今のパッチをスキップして再開git rebase --skip
  25. 25. rebase 履歴を改竄する過去のコミットを分割したりまとめたりできます。基本的にはサーバにプッシュする前に、ログを綺麗にするために使います。rebase -i <commit>サーバにプッシュ後は、他のブランチのマージやリベースの関係が崩れる恐れがあるので、絶対に行ってはいけません
  26. 26. pull fetch & mergegit pull [<remote>] [<branch>]次の2つは等価ですgit pull origin mastergit fetch origin && git merge origin/master次の設定をしていると、git pullだけで<remote>と<branch>を自動解決してくれます。git branch --set-upstream <localbranch><remote>/<remoptebranch>
  27. 27. pull fetch & rebasemergeの代わりにrebaseを使うこともできます。git pull --rebase <remote> <branch>git pull --rebaseは1.7.2で導入されたもので、比較的新しいオプションです。今まではmergeしか選択できませんでしたが、これにはいくつかの問題がありました。
  28. 28. pull mergeで処理される問題mergeとrebaseの違いは先程の説明通りです。pullを行う目的は、リモートブランチの変更をトラッキングしているローカルブランチに取り込むことしかありません。つまりはローカルブランチの更新です。ただ追跡しているだけなのに、マージコミットが作成されると、タイムライン上はリモートブランチとローカルブランチは別物扱いとなってしまいます。
  29. 29. pull いちいち--rebaseを打つのがメンドイメンドイのでデフォルトでrebaseを使うように設定します。<branch>に対するpullでは--rebaseを行うgit config branch.<branch>.rebase trueトラッキングブランチの作成時の上記の設定を自動で付与する。git config --global branch.autosetuprebase always1.7.9以降の場合は次の設定も使えるgit config --global pull.rebase trueこの場合、git config branch.<branch>.rebase.falseとすると、<branch>に対するpullだけはmergeで行われる。
  30. 30. status 現在のステージングの状態を見るgit status慣れたらgit status -sb
  31. 31. rm 削除するgit rm <file>ディレクトリを削除するgit rm -r <dir>ステージングから削除するgit rm --cached <file>
  32. 32. reset 現在から過去を取り消す直前のコミットをステージングの状態まで戻すgit reset --soft HEAD~直前のコミットを完全に戻すgit reset [--mixed] HEAD~直前のコミットを完全に戻して、untrackなものは削除するgit reset --hard HEAD~<commit>まで戻すgit reset ( --soft | --mixed | --hard ) <commit>
  33. 33. reset 現在から過去を取り消す直前のマージを取り消すgit reset --hard ORIG_HEADインタラクティブモードで部分的に戻すgit reset ( -p | --patch ) <commit>
  34. 34. remote リモートの管理リモートの追加remote add <name> <url>リモートの削除remote rm <name>リモートサーバ上に存在しないリモートブランチの削除remote prune <name>
  35. 35. tag タグの管理タグの作成git tag <tagname> [<commit>]タグの削除git tag -d <tagname>署名付きタグの作成git tag ( -s | -u <key_id> ) <tagname>
  36. 36. log ログを見るデフォルトgit logハッシュと派生したブランチを見やすくしたいgit log --oneline --decorate変更されたファイルとパッチも表示しちゃうgit log --statgit log --patch-with-stat
  37. 37. mergetool ツールを利用したコンフリクトの解決git mergetoolgit config --global merge.toolで設定したツールで3wayマージを行う。
  38. 38. revert 過去コミットを取り消すgit revert <commit>過去のコミットを取り消すために、逆マージをします。resetやrebase -iと違い、歴史を改竄せずに、取り消したというコミットを残します。
  39. 39. これでもまだほんの一部 1.7.11.3時点でのコマンド数: 152add diff lost-found prune-packed shortlog add--interactive diff-files ls-files pull show amdiff-index ls-remote push show-branch annotate diff-tree ls-tree quiltimport show-indexapply difftool mailinfo read-tree show-ref archive difftool--helper mailsplit rebase stagebisect fast-export merge receive-pack stash bisect--helper fast-import merge-base reflogstatus blame fetch merge-file relink stripspace branch fetch-pack merge-index remotesubmodule bundle filter-branch merge-octopus remote-ext svn cat-file fmt-merge-msgmerge-one-file remote-fd symbolic-ref check-attr for-each-ref merge-ours remote-ftp tagcheck-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-httpsunpack-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-infoclone hash-object mktree repo-config upload-archive column help mv request-pullupload-pack commit http-backend name-rev rerere var commit-tree http-fetch notesreset 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 revertwhatchanged 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 logprune shell
  40. 40. ネットで読めるいいものProGithttp://git-scm.com/book/jaGitをボトムアップから理解するhttp://goo.gl/1qPB4A successful Git branching modelhttp://goo.gl/xFd5g
  41. 41. 書籍入門Githttp://amzn.to/N8YyXQ入門githttp://amzn.to/SevHohGitによるバージョン管理http://amzn.to/OMG8Zo
  42. 42.       ._       \ヽ, ,、        `|/ノ         .|     _   |     \`ヽ、|      \, V         `L,,_         |ヽ、)  ,、        /    ヽYノ       /    rヽ、.|      |     `ー-ヽ|ヮ      |       `|      |.        |      ヽ、      |        ヽ____ノ        /_ノ  ヽ_\      /(≡)   (≡)\     /::::::⌒(__人__)⌒::::: \     |     |r┬-|     |     \      `ー´     /     /          \     (  |          |  )     \|    э    |/       (    ,,,,    ,ノ       \  、(U)ノ ノ         \/  /            ┼ヽ  -|r‐、. レ |         /  /\            d⌒) ./| _ノ  __ノ
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×