SlideShare a Scribd company logo
1 of 25
Download to read offline
2015.2.24
Effective Git 第三版 外村 暢康
前回の勉強会のねらい
❖ コンフリクトを伴う処理を行えるようにする
❖ 順序
❖ gitの基本をおさらい
❖ ローカルリポジトリ内でマージorリベース
❖ fetch したあとにローカルでコミットをまとめ、push
❖ そのほかテクニックの紹介
前回の勉強会の反省
❖ 概念の理解の前に実際の操作や実装面の話をしてしまっ
た
❖ 「gitの基本をおさらい」 #基本とは…?
今回の勉強会の方針
ローカルでのコンフリクト解決方法を学ぶ
図とキーワードを使って概念を先に紹介
ただし、理解には順序というものがあり…
理解の依存性
コンフリクト解決をする
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(あとで理解すればよい)
リポジトリ/インデックス/ワーキングツリー
リポジトリ:

コミットが入っている

このコンテキストではホスティング単位のリポジトリとは別の意味
インデックス:

変更時に、コミット予定の内容を書き出しておくところ
ワーキングツリー:

Gitの仕組みと関係のない普通FS上のファイル(ソースコード等)
監視/変更の分類
❖ Tracked

一度コミットしたファイル
❖ Untracked

git していないファイルはここ
❖ Ignore 

.gitignore または .git/info/exclude に書いてあるファイル
git status では Untrackedファイルと、 Trackedで変更のあったファイルが表示される。

Ignoreは表示されない。
基本操作のおさらい
❖ git init
❖ echo *.class > .gitignore
❖ git add .gitignore
❖ git commit



さらにgit add や git commit を続ける…
❖ git log
これだけなら問題ないと思いますが、デモ中でgit statusをしながら確認します
リポジトリ
インデックス
ワーキングツリー
追跡中(Tracked)

ファイルの場合
コミットしていない

新規ファイル

(Untracked)の場合
git rm —cached

{ファイル名}
git resert {ファイル名}
※ファイルシステム上
の変更は残る
indexへの追加/削除操作は

GUIツールを使いましょう
ブランチ
❖ ブランチやタグはリビジョン名前をつ
けるもの

(実データを持つモデルではない)
❖ 常にどこかのブランチ上にいる
❖ 用法の違い
❖ タグは固定的
❖ ブランチはコミットに付随して移動
していく
master
issues-28
tag:v1.0.2
チェックアウト
❖ 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
ローカルでコミットをまとめる
❖ git rebase と git mergeというものがある

( gitをわかりづらくしている大きな要素では?)
❖ 目的の違い
❖ merge:

本家ブランチにだれかの作業を取り込む
❖ rebase: 

本家から分岐したブランチXで作業していたが、

本家に更新があった。

本家の最新コミットをブランチXの分岐点にしたい

マージ
❖ 1. commit X まで作業した
❖ issues-28ブランチを作ってコミットを
重ねた
❖ その間、masterも更新されていた
❖ issues-28の作業が終わったので

masterブランチにて

git merge issues28(ブランチ名)
master
issues-28
マージコミット
commit X
これもマージ
master
issues-28
master
issues-28
X
master
Y
Z
X
Y
Z
issues-28
デフォルトの git mergeの動作
master…issues-28 のコミット差が一直線であれば、マー
ジコミットが発生しない
リベース
issues-28
issues-28’
origi
n/master
master’
❖ 1. commit X まで作業した
❖ issues-28ブランチを作ってコミットを
重ねた
❖ その間、masterも更新されていた
❖ issues-28の作業が終わったので

issues28ブランチにて

git rebase master’(ブランチ名)
commit X
merge, rebase の操作の違い
❖ merge

メインブランチにチェックアウトし

$ git merge {feature-branch}

コンフリクトがある場合は、コンフリクト解決後

$ git add {コンフリクトの起きたファイル}

$ git commit
❖ rebase

feature-brachにチェックアウトし

$ git rebase {main-branch}

コンフリクトがある場合は、コンフリクト解決後

$ git rebase ̶continue (addの必要はない)

コンフリクトのとりけし
❖ merge
❖ git reset —hard HEAD

❖ rebase
❖ git rebase —abort
git fetch
master issues-39 origin/issues-39origin/master
issues-39master
$ git checkout issues-39
$ git rebase origin/issues39
fetch
git fetch —prune
履歴変更
❖ 直前のコミットメッセージを書き換える

git commit ̶ammend
❖ いくつか前のコミットメッセージを書き換える
❖ rebase -i でまとめる、書き換える
❖ git rebase -i {リビジョン指定 ^}
❖ 各リビジョンの pick を

squash(r), fixup(f), reword(r) などに置き換える
git stash
一時的に未コミットの変更を退避させておく場所
• リポジトリ
• インデックス
• ワーキングツリー
のいずれでも無い
コミットの整形をするときに使うと便利
stash
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名]
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
git log graph
git stash list (複数回 stash saveした場合)
❖ 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のポイント

More Related Content

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

GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話Sota Sugiura
 
@s_ssk13さん向けGitHub入門
@s_ssk13さん向けGitHub入門@s_ssk13さん向けGitHub入門
@s_ssk13さん向けGitHub入門Takashi Imagire
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理Takafumi Yoshida
 
Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回kinme modoki
 
gitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみましたgitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみましたTakako Miyagawa
 
今さら聞けない人のためのGit超入門 GitLab 14対応版
今さら聞けない人のためのGit超入門 GitLab 14対応版今さら聞けない人のためのGit超入門 GitLab 14対応版
今さら聞けない人のためのGit超入門 GitLab 14対応版VirtualTech Japan Inc./Begi.net Inc.
 
2018 07-18 git-hub講座
2018 07-18 git-hub講座2018 07-18 git-hub講座
2018 07-18 git-hub講座貴一 末田
 
Githubサービスについて
GithubサービスについてGithubサービスについて
GithubサービスについてAkura Pi
 
Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!ymmt
 
バージョン管理
バージョン管理バージョン管理
バージョン管理Misa Kondo
 
なるべく噛み砕いたGit基礎講習
なるべく噛み砕いたGit基礎講習なるべく噛み砕いたGit基礎講習
なるべく噛み砕いたGit基礎講習石橋 啓太
 
Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)Makoto Kawano
 
バージョン管理システムチュートリアル
バージョン管理システムチュートリアルバージョン管理システムチュートリアル
バージョン管理システムチュートリアルRyo Igarashi
 
Build insider offline session チームでのgit
Build insider offline session チームでのgitBuild insider offline session チームでのgit
Build insider offline session チームでのgitTadahiro Ishisaka
 

Similar to 社内勉強会用Gitのスライド#02 (20)

GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話
 
Git tutorial
Git tutorialGit tutorial
Git tutorial
 
@s_ssk13さん向けGitHub入門
@s_ssk13さん向けGitHub入門@s_ssk13さん向けGitHub入門
@s_ssk13さん向けGitHub入門
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
 
Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回Git勉強会 2016 Gitで卒論を管理しよう回
Git勉強会 2016 Gitで卒論を管理しよう回
 
gitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみましたgitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみました
 
今さら聞けない人のためのGit超入門 GitLab 14対応版
今さら聞けない人のためのGit超入門 GitLab 14対応版今さら聞けない人のためのGit超入門 GitLab 14対応版
今さら聞けない人のためのGit超入門 GitLab 14対応版
 
2018 07-18 git-hub講座
2018 07-18 git-hub講座2018 07-18 git-hub講座
2018 07-18 git-hub講座
 
Githubサービスについて
GithubサービスについてGithubサービスについて
Githubサービスについて
 
Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!
 
Git地図
Git地図Git地図
Git地図
 
バージョン管理
バージョン管理バージョン管理
バージョン管理
 
Git @ NNCT programming workshop
Git @ NNCT programming workshopGit @ NNCT programming workshop
Git @ NNCT programming workshop
 
Git超入門
Git超入門Git超入門
Git超入門
 
なるべく噛み砕いたGit基礎講習
なるべく噛み砕いたGit基礎講習なるべく噛み砕いたGit基礎講習
なるべく噛み砕いたGit基礎講習
 
Git&GitHub入門
Git&GitHub入門Git&GitHub入門
Git&GitHub入門
 
Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)
 
バージョン管理システムチュートリアル
バージョン管理システムチュートリアルバージョン管理システムチュートリアル
バージョン管理システムチュートリアル
 
Build insider offline session チームでのgit
Build insider offline session チームでのgitBuild insider offline session チームでのgit
Build insider offline session チームでのgit
 
Yapc2012資料
Yapc2012資料Yapc2012資料
Yapc2012資料
 

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