Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

社内勉強会用Gitのスライド#02

521 views

Published on

社内勉強会用Gitのスライド

2015.2.10

Published in: Technology
  • Be the first to comment

社内勉強会用Gitのスライド#02

  1. 1. 2015.2.24 Effective Git 第三版 外村 暢康
  2. 2. 前回の勉強会のねらい ❖ コンフリクトを伴う処理を行えるようにする ❖ 順序 ❖ gitの基本をおさらい ❖ ローカルリポジトリ内でマージorリベース ❖ fetch したあとにローカルでコミットをまとめ、push ❖ そのほかテクニックの紹介
  3. 3. 前回の勉強会の反省 ❖ 概念の理解の前に実際の操作や実装面の話をしてしまっ た ❖ 「gitの基本をおさらい」 #基本とは…?
  4. 4. 今回の勉強会の方針 ローカルでのコンフリクト解決方法を学ぶ 図とキーワードを使って概念を先に紹介 ただし、理解には順序というものがあり…
  5. 5. 理解の依存性 コンフリクト解決をする Repository/Index/WorkTree Tracked/Untracked/Ignore
 git add git status コミットツリー, ブランチ git checkout git branch git mergegit rebase git commit git log ❖ リモートの概念 push/pull/fetch ❖ cherry-pick ❖ stash ❖ コミット整形(履歴改変) その他のtips(あとで理解すればよい)
  6. 6. リポジトリ/インデックス/ワーキングツリー リポジトリ:
 コミットが入っている
 このコンテキストではホスティング単位のリポジトリとは別の意味 インデックス:
 変更時に、コミット予定の内容を書き出しておくところ ワーキングツリー:
 Gitの仕組みと関係のない普通FS上のファイル(ソースコード等)
  7. 7. 監視/変更の分類 ❖ Tracked
 一度コミットしたファイル ❖ Untracked
 git していないファイルはここ ❖ Ignore 
 .gitignore または .git/info/exclude に書いてあるファイル git status では Untrackedファイルと、 Trackedで変更のあったファイルが表示される。
 Ignoreは表示されない。
  8. 8. 基本操作のおさらい ❖ git init ❖ echo *.class > .gitignore ❖ git add .gitignore ❖ git commit
 
 さらにgit add や git commit を続ける… ❖ git log これだけなら問題ないと思いますが、デモ中でgit statusをしながら確認します
  9. 9. リポジトリ インデックス ワーキングツリー 追跡中(Tracked)
 ファイルの場合 コミットしていない
 新規ファイル
 (Untracked)の場合 git rm —cached
 {ファイル名} git resert {ファイル名} ※ファイルシステム上 の変更は残る
  10. 10. indexへの追加/削除操作は
 GUIツールを使いましょう
  11. 11. ブランチ ❖ ブランチやタグはリビジョン名前をつ けるもの
 (実データを持つモデルではない) ❖ 常にどこかのブランチ上にいる ❖ 用法の違い ❖ タグは固定的 ❖ ブランチはコミットに付随して移動 していく master issues-28 tag:v1.0.2
  12. 12. チェックアウト ❖ git checkout は cd (change directory) のようなもの ❖ ブランチ間を移動する ❖ $ git checkout master ❖ $ git checkout issues-28 ❖ $ git checkout refs/tags/v1.0.2 master issues-28 tag:v1.0.2
  13. 13. ローカルでコミットをまとめる ❖ git rebase と git mergeというものがある
 ( gitをわかりづらくしている大きな要素では?) ❖ 目的の違い ❖ merge:
 本家ブランチにだれかの作業を取り込む ❖ rebase: 
 本家から分岐したブランチXで作業していたが、
 本家に更新があった。
 本家の最新コミットをブランチXの分岐点にしたい

  14. 14. マージ ❖ 1. commit X まで作業した ❖ issues-28ブランチを作ってコミットを 重ねた ❖ その間、masterも更新されていた ❖ issues-28の作業が終わったので
 masterブランチにて
 git merge issues28(ブランチ名) master issues-28 マージコミット commit X
  15. 15. これもマージ master issues-28 master issues-28 X master Y Z X Y Z issues-28 デフォルトの git mergeの動作 master…issues-28 のコミット差が一直線であれば、マー ジコミットが発生しない
  16. 16. リベース issues-28 issues-28’ origi n/master master’ ❖ 1. commit X まで作業した ❖ issues-28ブランチを作ってコミットを 重ねた ❖ その間、masterも更新されていた ❖ issues-28の作業が終わったので
 issues28ブランチにて
 git rebase master’(ブランチ名) commit X
  17. 17. merge, rebase の操作の違い ❖ merge
 メインブランチにチェックアウトし
 $ git merge {feature-branch}
 コンフリクトがある場合は、コンフリクト解決後
 $ git add {コンフリクトの起きたファイル}
 $ git commit ❖ rebase
 feature-brachにチェックアウトし
 $ git rebase {main-branch}
 コンフリクトがある場合は、コンフリクト解決後
 $ git rebase ̶continue (addの必要はない)

  18. 18. コンフリクトのとりけし ❖ merge ❖ git reset —hard HEAD
 ❖ rebase ❖ git rebase —abort
  19. 19. git fetch master issues-39 origin/issues-39origin/master issues-39master $ git checkout issues-39 $ git rebase origin/issues39 fetch git fetch —prune
  20. 20. 履歴変更 ❖ 直前のコミットメッセージを書き換える
 git commit ̶ammend ❖ いくつか前のコミットメッセージを書き換える ❖ rebase -i でまとめる、書き換える ❖ git rebase -i {リビジョン指定 ^} ❖ 各リビジョンの pick を
 squash(r), fixup(f), reword(r) などに置き換える
  21. 21. git stash 一時的に未コミットの変更を退避させておく場所 • リポジトリ • インデックス • ワーキングツリー のいずれでも無い コミットの整形をするときに使うと便利 stash
  22. 22. git stashを使ってみる ❖ 最初はsaveとpopだけ使えばOK ❖ git stash save [stash commit メッセージ] ❖ git stash pop [stash名 (stash@{1}など)] ❖ git stash drop [stash名] ❖ stashされた情報を見るコマンドも知っておくと便利 ❖ git stash list ❖ git stash show -v [stash名]
  23. 23. Saved working directory and index state WIP on master: b7e67fd add index.html HEAD is now at b7e67fd add index.html % git stash save git status git status diff
  24. 24. git log graph git stash list (複数回 stash saveした場合)
  25. 25. ❖ git stash save のsaveは省略可能 ❖ 複数のstashを保存可能 ❖ stash@{0} など、任意のstashを指定してgit stash pop可能 ❖ git stash pop は保存した変更をHEADに書き込む
 (stash saveしたときのブランチではない) ❖ stash saveした変更はリポジトリ全域でstash pop可能
 ❖ saveしたstashは早めにpopするのが吉 stashのポイント

×