SlideShare a Scribd company logo
1 of 274
Download to read offline
git 初めの一歩

February 20, 2014
目次
1 ローカルで使う
使ってみる
branch を使用する
過去の履歴を活用する
レポジトリの状態を確認する
2 リモートレポジトリを使う
使ってみる
複数人で開発する
更新が競合したら
3 その他
4 最後に
introduction

目的 git を使い、man を読むための最低限の知識をつ
ける
対象者 git を触った事が有るけれど、良く分からない人
注意 git はデフォルト設定で動作していると仮定
(設定次第では、この通りには動作しない)
注意 git の best practice ではありません
ローカルで使う
introduction

本章のスコープ

workspace
作業ディレクトリ

cached (index)
staging 環境

repository
git の本体
init (ローカル)
使ってみる

git を使い始める準備をする
$
$
$
$
$

mkdir ˜/local rep
cd ˜/local rep1
git init
git config --global user.name ’Your Name’
git config --global user.email ’your@address’

1

この後、しばらくは ˜/local rep で作業します
中で起きている事
使ってみる

$ mkdir ˜/local rep
$ cd ˜/local rep
ここで作成するディレクトリが workspace
中で起きている事
使ってみる

workspace

$ mkdir ˜/local rep
$ cd ˜/local rep
ここで作成するディレクトリが workspace
中で起きている事
使ってみる

workspace

$ git config --global user.name ’Your Name’
$ git config --global user.email ’your@address’
home directory 直下の config file を編集
workspace, cached, repository には影響無し
中で起きている事
使ってみる

workspace

$ git init
ワークスペース直下に .git ディレクトリを作成し、その中に
cached や repository を初め git に必要な物を作成する
中で起きている事
使ってみる

workspace
repository
cached (index)
$ git init
ワークスペース直下に .git ディレクトリを作成し、その中に
cached や repository を初め git に必要な物を作成する
中で起きている事
使ってみる

workspace
repository
cached (index)
$ git init
今後、.git ディレクトリを直接触るか、git 以外のコマンドは、
基本的に workspace の作業と思ってよい。
add, commit
使ってみる

repository にファイル、ディレクトリを追加する
workspace を更新
$ touch a b c
add, commit
使ってみる

repository にファイル、ディレクトリを追加する
workspace を cached に反映
$ git add a b
add, commit
使ってみる

repository にファイル、ディレクトリを追加する
cached を repository に反映
$ git commit -m ’Add a and b.’
中で起きている事
使ってみる

workspace

cached (index)

repository
中で起きている事
使ってみる

workspace

repository

cached (index)

$ touch a b c
.git ディレクトリは触っていないので、workspace のみ変更
中で起きている事
使ってみる

workspace
abc

repository

cached (index)

$ touch a b c
.git ディレクトリは触っていないので、workspace のみ変更
中で起きている事
使ってみる

workspace
abc

repository

cached (index)

$ git add a b
workspace から cached へファイル、ディレクトリをコピー
中で起きている事
使ってみる

workspace
abc

repository

cached (index)
ab
$ git add a b
workspace から cached へファイル、ディレクトリをコピー
中で起きている事
使ってみる

workspace
abc

repository

cached (index)
ab
$ git commit -m ’Add a and b.’
cached を取り込み、message を添えて commit を作成
中で起きている事
使ってみる

workspace
abc

repository
Add a and b.

cached (index)
ab

ab

$ git commit -m ’Add a and b.’
cached を取り込み、message を添えて commit を作成
中で起きている事
使ってみる

workspace
abc

repository

cached (index)
ab

Add a and b.
ab
master

$ git commit -m ’Add a and b.’
また、初回 commit 時のみ master branch を作成
(branch: commit へのリンクの様な物)
中で起きている事
使ってみる

workspace
abc

repository

cached (index)
ab

Add a and b.
ab
master←HEAD

$ git commit -m ’Add a and b.’
最初、HEAD は master へ向いている
(HEAD: repository 内の現在の commit を指すリンクの様
な物)
(この場合、HEAD はリンクのリンクとなる)
git add コマンド補足
使ってみる

git add path1 [path2 [path3 ...]]2
で複数の path を一度に workspace へコピー可能
path が ディレクトリの場合、そのディレクトリ以下の
ファイルを再起的に git add する
workspace のトップディレクトリで git add . と行うと全
ファイルを git add できる

2

[ ] でくくってあるパラメータは省略可能という意味
git commit コマンド補足
git commit
でエディタが立ち上がり、そこで commit message を入
力すると新 commit が作成される

git commit -m message
でエディタを立ち上げずに commit message を指定する
事も可能

message の無い commit を作成する事はできない
mv, rm
使ってみる

repository からファイルの削除、移動 (リネーム)
workspace, cached でリネーム
$ git mv a d
mv, rm
使ってみる

repository からファイルの削除、移動 (リネーム)
workspace, cached で削除
$ git rm b
mv, rm
使ってみる

repository からファイルの削除、移動 (リネーム)
cached を repository に反映
$ git commit -m ’Rename a to d and delete b.’
中で起きている事
使ってみる

repository
workspace
abc
cached (index)
ab

Add a and b.
ab
master←HEAD
中で起きている事
使ってみる

repository
workspace
abc
cached (index)
ab

Add a and b.
ab
master←HEAD

$ git mv a d
workspace, cached の両方でファイルを移動 (リネーム)
中で起きている事
使ってみる

repository
workspace
bcd
cached (index)
b d

Add a and b.
ab
master←HEAD

$ git mv a d
workspace, cached の両方でファイルを移動 (リネーム)
中で起きている事
使ってみる

repository
workspace
bcd
cached (index)
b d

Add a and b.
ab
master←HEAD

$ git rm b
workspace, cached の両方からファイルを削除
中で起きている事
使ってみる

repository
workspace
cd
cached (index)
d

Add a and b.
ab
master←HEAD

$ git rm b
workspace, cached の両方からファイルを削除
中で起きている事
使ってみる

repository
workspace
cd
cached (index)
d

Add a and b.
ab
master←HEAD

$ git commit -m ’Rename a to d and delete b.’
cached を取り込み、message を添えて、現在の HEAD を親と
する commit を作成
中で起きている事
使ってみる

repository
workspace
cd
cached (index)
d

Rename a to d and delete b.
d
Add a and b.
ab
master←HEAD

$ git commit -m ’Rename a to d and delete b.’
cached を取り込み、message を添えて、現在の HEAD を親と
する commit を作成
中で起きている事
使ってみる

repository
workspace
cd
cached (index)
d

Rename a to d and delete b.
d
Add a and b.
ab
master←HEAD

$ git commit -m ’Rename a to d and delete b.’
HEAD が branch を指している時 (普通はこの状態) は、
その branch の向き先を新しい commit へ変更
中で起きている事
使ってみる

repository
workspace
cd
cached (index)
d

Rename a to d and delete b.
d
master←HEAD

Add a and b.
ab

$ git commit -m ’Rename a to d and delete b.’
HEAD が branch を指している時 (普通はこの状態) は、
その branch の向き先を新しい commit へ変更
中で起きている事
使ってみる

repository
workspace
cd

Rename a to d and delete b.

cached (index)
d

d
master←HEAD

Add a and b.
ab

$ git commit -m ’Rename a to d and delete b.’
HEAD は master へ向いているので、
結果的に新しい commit へ移動
git mv コマンド補足
使ってみる

git mv [-f] source destination
で source を destination に移動
通常の mv コマンドのように、destination がディレクト
リの場合、source は destination 以下のディレクトリに
移動

-f をつけると、既存のファイルを上書き出来る
(-f が無い場合、エラーとなる)
git rm コマンド補足
使ってみる

git rm [-r] [-f] path1 [path2 [path3 ...]]
で複数の path を削除可能
通常の rm コマンドのように、ディレクトリを削除する
場合は -r オプションが必要

workspace と cached の内容が違う時などは、誤操作防止
のために git rm はエラーになる
そのような場合、-f を使うと正常に削除可能
ここまでのまとめ
使ってみる

git を始めたい場合、git init を実行
git add は workspace から cached へコピー
git mv は workspace と cached 両方で移動、リネーム
git rm は workspace と cached 両方で削除
ここまでのまとめ
使ってみる

git commit は cached に message を添えて
commit を作成
HEAD が branch を向いている時は
branch を新しい commit へ向ける
branch は commit へのリンクの様な物
HEAD は現在の commit へのリンクの様な物
通常、HEAD は branch を指している事が多い
branch (一覧、作成)
branch を使用する

branch の一覧表示、作成
現在の branch を確認

$ git branch
* master
branch (一覧、作成)
branch を使用する

branch の一覧表示、作成
新 branch の作成

$ git branch develop
branch (一覧、作成)
branch を使用する

branch の一覧表示、作成
現在の branch を確認

$ git branch
* master
develop
branch (一覧、作成)
branch を使用する

branch の一覧表示、作成
repository の更新を行ってみる
$ git add c
$ git commit -m ’Add c.’
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
d

Rename a to d and delete b.
master←HEAD
Add a and b.
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
d

Rename a to d and delete b.
master←HEAD
Add a and b.

$ git branch
現在の branch 一覧を表示
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
d

Rename a to d and delete b.
master←HEAD
Add a and b.

$ git branch
* master
* は HEAD が向いている branch の印
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
d

Rename a to d and delete b.
master←HEAD
Add a and b.

$ git branch develop
HEAD と同じ commit を指す branch を作成
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
d

Rename a to d and delete b.
master←HEAD develop
Add a and b.

$ git branch develop
HEAD と同じ commit を指す branch を作成
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
d

Rename a to d and delete b.
master←HEAD develop
Add a and b.

$ git branch
* master
develop
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
d

Rename a to d and delete b.
master←HEAD develop
Add a and b.

$ git add c
c を cached へコピー
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
cd

Rename a to d and delete b.
master←HEAD develop
Add a and b.

$ git add c
c を cached へコピー
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
cd

Rename a to d and delete b.
master←HEAD develop
Add a and b.

$ git commit -m ’Add c.’
cached を取り込み、message を添えて、現在の HEAD を親と
する commit を作成
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
cd

Add c.

Rename a to d and delete b.
master←HEAD develop
Add a and b.

$ git commit -m ’Add c.’
cached を取り込み、message を添えて、現在の HEAD を親と
する commit を作成
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
cd

Add c.

Rename a to d and delete b.
master←HEAD develop
Add a and b.

$ git commit -m ’Add c.’
HEAD が branch を指している時は
その branch の向き先を新しい commit へ変更
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
cd

Add c.
master←HEAD
Rename a to d and delete b.
develop
Add a and b.

$ git commit -m ’Add c.’
HEAD が branch を指している時は
その branch の向き先を新しい commit へ変更
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
cd

Add c.
master←HEAD
Rename a to d and delete b.
develop
Add a and b.

$ git commit -m ’Add c.’
HEAD が指しているのは master だけなので、develop は放置
git branch コマンド補足 (一覧、作成)
branch を使用する

git branch [-a]
で現在の branch 一覧を表示
-a オプションをつけると、remote branch3 も表示する
git branch branch-name [start-point]
で start-point をさす branch を作成
start-point は branch, HEAD, ハッシュ値 4 等で指定
start-point のデフォルト値は HEAD

3
4

後述
後述
checkout
branch を使用する

HEAD の切り替えと、会わせて workspace と cached の変更
workspace のファイル確認
$ ls
cd
checkout
branch を使用する

HEAD の切り替えと、会わせて workspace と cached の変更
HEAD の切り替え実施
$ git checkout develop
checkout
branch を使用する

HEAD の切り替えと、会わせて workspace と cached の変更
workspace のファイル再確認
$ ls
d
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
cd

Add c.
cd
master←HEAD
Rename a to d and delete b.
d
develop
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
cd

Add c.
cd
master←HEAD
Rename a to d and delete b.
d
develop

$ ls
cd
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
cd

Add c.
cd
master←HEAD
Rename a to d and delete b.
d
develop

$ git checkout develop
HEAD のリンクの向き先を develop に変更
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
cd

Add c.
cd
master
Rename a to d and delete b.
d
develop←HEAD

$ git checkout develop
HEAD のリンクの向き先を develop に変更
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
cd

Add c.
cd
master
Rename a to d and delete b.
d
develop←HEAD

$ git checkout develop
あわせて、workspace や cached に新旧 HEAD の差分も適用
中で起きている事
branch を使用する

repository
workspace
d
cached (index)
d

Add c.
cd
master
Rename a to d and delete b.
d
develop←HEAD

$ git checkout develop
あわせて、workspace や cached に新旧 HEAD の差分も適用
中で起きている事
branch を使用する

repository
workspace
d
cached (index)
d

Add c.
cd
master
Rename a to d and delete b.
d
develop←HEAD

$ ls
d
git checkout コマンド補足
branch を使用する

git checkout commit
で HEAD の commit へ切り替え
workspace, cached も会わせて変更
commit は branch, tag5 , ハッシュ値 6 等で指定
リリース時以外は HEAD はどこかの branch を指してい
る状態にすると良い

workspace や cached が clean でない場合 7 は
情報が失われる可能性があるので注意

5

後述
後述
7
未 commit のファイルがある場合
6
merge
branch を使用する

他のブランチの更新を取り込む

develop を更新
$ touch e
$ git add e
$ git commit -m ’Add e.’
merge
branch を使用する

他のブランチの更新を取り込む

master に develop の更新を反映
$ git checkout master
$ git merge develop
中で起きている事
branch を使用する

repository
workspace
d
cached (index)
d

Add c.
master
Rename a to d and delete b.
develop←HEAD
中で起きている事
branch を使用する

repository
workspace
d
cached (index)
d

Add c.
master
Rename a to d and delete b.
develop←HEAD

$ touch e
$ git add e
$ git commit -m ’Add e.’
中で起きている事
branch を使用する

repository
workspace
de
Add c.
master

cached (index)
de

Add e.
develop←HEAD

Rename a to d and delete b.

$ touch e
$ git add e
$ git commit -m ’Add e.’
中で起きている事
branch を使用する

repository
workspace
de
Add c.
master

cached (index)
de

Add e.
develop←HEAD

Rename a to d and delete b.

$ git checkout master
中で起きている事
branch を使用する

repository
workspace
cd
Add c.
master←HEAD

cached (index)
cd

Add e.
develop

Rename a to d and delete b.

$ git checkout master
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
cd

Add c.
master←HEAD

Add e.
develop

Rename a to d and delete b.

$ git merge develop
HEAD と develop の共通の先祖の commit を探す
“Rename a to d and delete b.” という commit が相当
中で起きている事
branch を使用する

repository
workspace
cd
cached (index)
cd

Add c.
master←HEAD

Add e.
develop

Rename a to d and delete b.

$ git merge develop
branch が分岐してから develop で行われた
全変更を workspace に適用
中で起きている事
branch を使用する

repository
workspace
cde
cached (index)
cd

Add c.
master←HEAD

Add e.
develop

Rename a to d and delete b.

$ git merge develop
branch が分岐してから develop で行われた
全変更を workspace に適用
中で起きている事
branch を使用する

repository
workspace
cde
cached (index)
cd

Add c.
master←HEAD

Add e.
develop

Rename a to d and delete b.

$ git merge develop
cached に適用
中で起きている事
branch を使用する

repository
workspace
cde
cached (index)
cde

Add c.
master←HEAD

Add e.
develop

Rename a to d and delete b.

$ git merge develop
cached に適用
中で起きている事
branch を使用する

repository
workspace
cde
cached (index)
cde

Add c.
master←HEAD

Add e.
develop

Rename a to d and delete b.

$ git merge develop
commit の作成
中で起きている事
branch を使用する

repository
workspace
cde

Merge branch ’develop’
master←HEAD
Add e.

cached (index)
cde

Add c.

develop

Rename a to d and delete b.

$ git merge develop
commit の作成
git merge コマンド補足
branch を使用する

実際には branch の状態によって merge 後の
repository の状態は異なる
(ここで挙げた挙動は一例)
コマンド実施後に message 入力画面が出てくる事と
出てこない事があるが
今回の範囲を超えるので詳細は割愛
いずれの場合でも、最新状態では 2 個の branch の
変更は全て含まれる
branch (削除)
branch を使用する

既存の branch を削除
現在の branch 一覧

$ git branch
develop
* master
branch (削除)
branch を使用する

既存の branch を削除

branch 削除
$ git branch -d develop
branch (削除)
branch を使用する

既存の branch を削除
現在の branch 一覧

$ git branch
* master
中で起きている事
branch を使用する

repository
workspace
cde
cached (index)
cde

Merge branch ’develop’
master←HEAD
Add c.

Add e.
develop

Rename a to d and delete b.
中で起きている事
branch を使用する

repository
workspace
cde
cached (index)
cde

Merge branch ’develop’
master←HEAD
Add c.

Add e.
develop

Rename a to d and delete b.

$ git branch
develop
* master
中で起きている事
branch を使用する

repository
Merge branch ’develop’

workspace
cde

master←HEAD

cached (index)
cde

Add c.

Add e.
Add e.
develop

Rename a to d and delete b.

$ git branch -d develop
develop branch を削除
(commit は消えない)
中で起きている事
branch を使用する

repository
Merge branch ’develop’

workspace
cde

master←HEAD

cached (index)
cde

Add c.

Add e.

Rename a to d and delete b.

$ git branch -d develop
develop branch を削除
(commit は消えない)
中で起きている事
branch を使用する

repository
workspace
cde
cached (index)
cde

Merge branch ’develop’
master←HEAD
Add c.

Add e.

Rename a to d and delete b.

$ git branch
* master
branch (削除)
branch を使用する

git branch -d branch1 [branch2 [branch3 ] ...]
で複数 branch の削除が可能
branch を削除しても、commit は消えない
branch を削除すると、その commit が
見つけにくくなる場合がある 8
そのような場合、誤操作防止の為に
git branch -d はエラーとなる
git branch -D を使用すると、上記の場合でも
branch の強制削除可能
8

後述
ここまでのまとめ
branch を使用する

git branch は branch の一覧、作成、削除
git checkout は HEAD の切り替え
会わせて、workspace, cached も変更
git merge は他の branch の変更を取り入れる
branch の作成、削除で commit が
作成、削除される事は無い
log
過去の履歴を活用する

過去の履歴を閲覧
log
過去の履歴を活用する

過去の履歴を閲覧

$ git log --graph
* commit 86ba5efc1bce4f65f517eb80a3cc5c21113bc637
| Merge: ac24086 365850a
| | Author: Your Name <your@address>
| | Date: Wed Jan 1 02:42:46 2014 +0900
||
||
Merge branch ’develop’
||
| * commit 365850a9b09bb6fbcfc3f762b630380053b46575
| | Author: Your Name <your@address>
| | Date: Wed Jan 1 02:42:32 2014 +0900
||
||
Add e.
||
...
log
過去の履歴を活用する

過去の履歴を閲覧

git log は less を使用しているので、長い場合は j,k で上下移
動、q で終了
log
過去の履歴を活用する

過去の履歴を閲覧

—
commit 86ba5efc1bce4f65f517eb80a3cc5c21113bc637
Merge: ac24086 365850a
Author: Your Name <your@address>
Date: Wed Jan 1 02:42:46 2014 +0900
Merge branch ’develop’

—
これが一つの commit
log
過去の履歴を活用する

過去の履歴を閲覧

—
commit 86ba5efc1bce4f65f517eb80a3cc5c21113bc637
Merge: ac24086 365850a
Author: Your Name <your@address>
Date: Wed Jan 1 02:42:46 2014 +0900
Merge branch ’develop’

—
“commit” の横に書いてあるのが、その commit のハッシュ値
(リンクでは無い、commit の本当の名前として使用)
log
過去の履歴を活用する

過去の履歴を閲覧

—
commit 86ba5efc1bce4f65f517eb80a3cc5c21113bc637
Merge: ac24086 365850a
Author: Your Name <your@address>
Date: Wed Jan 1 02:42:46 2014 +0900
Merge branch ’develop’

—
最後が commit message
git log コマンド補足
過去の履歴を活用する

git log --graph [commit]
で commit の先祖を表示
commit は branch, HEAD, ハッシュ値等で指定
commit のデフォルトは HEAD
ハッシュ値はその commit の本名の要な物
git branch や git checkout で使用可能
(自信が無い場合は、git checkout で commit のハッシュ
値を指定する事はやめた方が無難)

git log で簡単に調べられるのは各 branch やその先祖
例えば、現在の最新状態の branch を削除すると最新
commit を見つける事が困難になる
(git branch -d でエラーが出るのはそのような場合)
reset
過去の履歴を活用する

branch と HEAD を一度に切り替える
(良く、過去のバージョンに戻すのに使用)
戻したいバージョン (例えば、“Add e.” という commit ) の
commit のハッシュ値を確認

$ git log --graph
...
(commit のハッシュ値 commit する度に異なるので注意)
今回は 365850a9b09bb6fbcfc3f762b630380053b46575 とする
reset
過去の履歴を活用する

branch と HEAD を一度に切り替える
(良く、過去のバージョンに戻すのに使用)
準備

$ git branch for soft
$ git branch for mixed
$ git branch for hard
reset
過去の履歴を活用する

branch と HEAD を一度に切り替える
(良く、過去のバージョンに戻すのに使用)
HEAD だけ古いバージョンに戻す
$ git checkout for soft
$ git reset --soft 36589

9

重複が無ければ、hash 値は先頭 4 文字以上で大丈夫
reset
過去の履歴を活用する

branch と HEAD を一度に切り替える
(良く、過去のバージョンに戻すのに使用)
HEAD と cached を古いバージョンに戻す
$ git checkout for mixed
$ git reset --mixed 3658
reset
過去の履歴を活用する

branch と HEAD を一度に切り替える
(良く、過去のバージョンに戻すのに使用)
HEAD, cached, workspace の全てを古いバージョンに戻す
$ git checkout for hard
$ git reset --hard 3658
reset
過去の履歴を活用する

branch と HEAD を一度に切り替える
(良く、過去のバージョンに戻すのに使用)
テスト環境後始末

$ git checkout master
$ git branch -d for soft for mixed for hard
中で起きている事
過去の履歴を活用する

repository
Merge branch ’develop’

workspace
cde

cde
master←HEAD

cached (index)
cde

Add e.
Add c.

de
中で起きている事
過去の履歴を活用する

repository
Merge branch ’develop’

workspace
cde

cde
master←HEAD for soft for mixed for hard

cached (index)
cde

Add e.
Add c.

$ git branch for soft
$ git branch for mixed
$ git branch for hard

de
中で起きている事
過去の履歴を活用する

repository
Merge branch ’develop’

workspace
cde

cde
master←HEAD for soft for mixed for hard

cached (index)
cde

Add e.
Add c.

$ git checkout for soft

de
中で起きている事
過去の履歴を活用する

repository
Merge branch ’develop’

workspace
cde

cde
master for soft←HEAD for mixed for hard

cached (index)
cde

Add e.
Add c.

$ git checkout for soft

de
中で起きている事
過去の履歴を活用する

repository
Merge branch ’develop’

workspace
cde

cde
master for soft←HEAD for mixed for hard

cached (index)
cde

Add e.
Add c.

de

$ git reset --soft 3658
HEAD だけ変更する
(HEAD が branch を指している時は branch を変更する)
中で起きている事
過去の履歴を活用する

repository
Merge branch ’develop’

workspace
cde

cde
master for mixed for hard

cached (index)
cde

Add e.
de
Add c.

for soft←HEAD

$ git reset --soft 3658
HEAD だけ変更する
(HEAD が branch を指している時は branch を変更する)
中で起きている事
過去の履歴を活用する

repository
Merge branch ’develop’

workspace
cde

cde
master for mixed for hard

cached (index)
cde

Add e.
de
Add c.

$ git checkout for mixed

for soft←HEAD
中で起きている事
過去の履歴を活用する

repository
Merge branch ’develop’

workspace
cde

cde
master for mixed←HEAD for hard

cached (index)
cde

Add e.
de
Add c.

$ git checkout for mixed

for soft
中で起きている事
過去の履歴を活用する

repository
Merge branch ’develop’

workspace
cde

cde
master for mixed←HEAD for hard

cached (index)
cde

Add e.
de
Add c.

$ git reset --mixed 3658
cached と HEAD を変更する

for soft
中で起きている事
過去の履歴を活用する

repository
Merge branch ’develop’

workspace
cde

cde
master for hard

cached (index)
de

Add e.
de
Add c.

$ git reset --mixed 3658
cached と HEAD を変更する

for soft for mixed←HEAD
中で起きている事
過去の履歴を活用する

repository
Merge branch ’develop’

workspace
cde

cde
master for hard

cached (index)
de

Add e.
de
Add c.

$ git checkout for hard

for soft for mixed←HEAD
中で起きている事
過去の履歴を活用する

repository
Merge branch ’develop’

workspace
cde

cde
master for hard←HEAD

cached (index)
cde

Add e.
de
Add c.

$ git checkout for hard

for soft for mixed
中で起きている事
過去の履歴を活用する

repository
Merge branch ’develop’

workspace
cde

cde
master for hard←HEAD

cached (index)
cde

Add e.
de
Add c.

for soft for mixed

$ git reset --hard 3658
workspace, cached, HEAD を変更する
中で起きている事
過去の履歴を活用する

repository
Merge branch ’develop’

workspace
de

cde
master

cached (index)
de

Add e.
de
Add c.

for soft for mixed for hard←HEAD

$ git reset --hard 3658
workspace, cached, HEAD を変更する
中で起きている事
過去の履歴を活用する

repository
Merge branch ’develop’

workspace
cde

cde
master←HEAD

cached (index)
cde

Add e.
Add c.

$ git checkout master
$ git branch -d for soft for mixed for hard

de
git reset コマンド補足
過去の履歴を活用する

git reset [--soft | --mixed | --hard] [comit]
で HEAD, branch の切り替えと (オプションによって)
workspace や cached の変更を実施
オプションのデフォルトは --mixed、
commit は branch, HEAD, ハッシュ値等で指定
commit のデフォルトは HEAD
git reset とだけ実行すると、HEAD は変わらず cached
が HEAD と同じ状態になる
間違えて git add してしまった場合などに使用
HEAD を切り替えるので、git reset は git checkout と少
し似ている
違いは、branch も一緒に切り替えるかどうか
ここまでのまとめ
git log は過去の履歴や commit のハッシュ値を表示
commit のハッシュ値はその commit の名前のように使用
git reset は HEAD の移動や workspace, cached のクリア
等を実施
(オプションによって挙動は異なる)
status
レポジトリの状態を確認する

現在の cached の状態を確認

workspace, cached の変更
$ touch f g
$ git add f
$ echo ’test’ >f
status
レポジトリの状態を確認する

現在の cached の状態を確認

$ git status
Changes to be committed:
(use ”git reset HEAD <file>...” to unstage)
new file: f
Changes not staged for commit:
(use ”git add <file>...” to update what will be committed)
(use ”git checkout -- <file>...” to discard changes in working directory)
modified: f
Untracked files:
(use ”git add <file>...” to include in what will be committed)
g
status
レポジトリの状態を確認する

現在の cached の状態を確認
上から、HEAD, cached 間の差分
Changes to be committed:
(use ”git reset HEAD <file>...” to unstage)
new file: f
status
レポジトリの状態を確認する

現在の cached の状態を確認

workspace と cached の差分
Changes not staged for commit:
(use ”git add <file>...” to update what will be committed)
(use ”git checkout -- <file>...” to discard changes in working
directory)
modified: f
status
レポジトリの状態を確認する

現在の cached の状態を確認

cached にも HEAD にも無いファイル
Untracked files:
(use ”git add <file>...” to include in what will be committed)
g
status
レポジトリの状態を確認する

現在の cached の状態を確認

$ git add f
$ git status
Changes to be committed:
(use ”git reset HEAD <file>...” to unstage)
new file: f
Untracked files:
(use ”git add <file>...” to include in what will be committed)
g

workspace と cached の差分が無くなる
diff
レポジトリの状態を確認する

workspace, cached, commit 間の差分をパッチレベルで表示
$ git diff
workspace と cached の差分を表示
(差分は無いので何も表示されない)
diff
レポジトリの状態を確認する

workspace, cached, commit 間の差分をパッチレベルで表示
$ git diff --cached
cached と HEAD の差分を表示
diff --git a/f b/f
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/f
@@ -0,0 +1 @@
+test
diff
レポジトリの状態を確認する

workspace, cached, commit 間の差分をパッチレベルで表示
$ git diff 3658
workspace と commit の差分を表示
diff --git a/c b/c
new file mode 100644
index 0000000..e69de29
diff --git a/f b/f
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/f
@@ -0,0 +1 @@
diff
レポジトリの状態を確認する

workspace, cached, commit 間の差分をパッチレベルで表示
$ git diff 3658 HEAD
3658 と HEAD の差分を表示
diff --git a/c b/c
new file mode 100644
index 0000000..e69de29
git diff コマンド補足
レポジトリの状態を確認する

git diff [--]9 [path1 [path2 [...]]]10
で path の workspace と cached の差分を表示
git diff commit [--] [path1 [path2 [...]]]
で path の workspace と commit の差分を表示
commit は HEAD や branch, ハッシュ値等で指定

git diff --cached commit [--] [path1 [path2 [...]]]
で path の commit と cached の差分を表示

git diff commit1 commit2 [--] [path1 [path2 [...]]]
で path の commit 間の差分を表示
9
10

曖昧さ回避の為のオプション、通常は必要ない
path が省略されると、git 管理下の全ファイル
ここまでのまとめ
レポジトリの状態を確認する

git status は workspace, cached, HEAD の状態を確認
git diff は workspace, cached, commit 間の差分を表示
git status はファイルの更新有無のみ、
git diff はパッチレベルの差分 (ファイルの中身) を表示
commit 前に git status で確認するのは良い習慣
リモートレポジトリを使う
introduction

本章のスコープ

local
前章で作成した repository

remote
local repository から作成した remote repository
clone
remote repository を clone して作った repository
init (リモート)
使ってみる

remote repository を用意する
remote repository の作成
$ mkdir ˜/remote rep
$ cd ˜/remote rep
$ git init --bare
init (リモート)
使ってみる

remote repository を用意する
remote repository のエイリアス作成
$ cd ˜/local rep
$ git remote add origin ˜/remote rep
git init コマンド補足 (リモート)
使ってみる

多くの git server では URI を ssh や https で指定するが
それはネットワーク的な問題
repository 自体はこの用法で作成している事も多い
この方法で作成した remote repository は
workspace が無いので
普通の local repository としては使用不可
その他、git の各種デフォルト設定が異なっている
push
使ってみる

local branch のコピーを git server に作成
master branch を転送
$ git push origin master
push
使ってみる

local branch のコピーを git server に作成
develop branch 作成
$ git branch develop
push
使ってみる

local branch のコピーを git server に作成
master branch の更新
(git add f は git status の説明時に実施済み)
$ git commit -m ’Add f.’
push
使ってみる

local branch のコピーを git server に作成
master branch の再転送
$ git push origin master
push
使ってみる

local branch のコピーを git server に作成
develop branch の転送
$ git push origin develop
中で起きている事
使ってみる

remote

local

Merge branch ’develop’
master←HEAD
Add c.

Add e.
中で起きている事
使ってみる

remote

local

Merge branch ’develop’
master←HEAD
Add c.

Add e.

$ git push origin master
origin に master branch が有るか確認 (無い)
中で起きている事
使ってみる

remote

local

Merge branch ’develop’
master←HEAD
Add c.

Add e.

$ git push origin master
origin に master branch の指す commit をコピー
中で起きている事
使ってみる

remote

local

Merge branch ’develop’

Merge branch ’develop’

master←HEAD

master

Add c.

Add e.

Add c.

$ git push origin master
origin に master branch の指す commit をコピー

Add e.
中で起きている事
使ってみる

remote

local

Merge branch ’develop’

Merge branch ’develop’

master←HEAD

master

Add c.

Add e.

$ git branch develop

Add c.

Add e.
中で起きている事
使ってみる

remote

local

Merge branch ’develop’

Merge branch ’develop’

master←HEAD develop

master

Add c.

Add e.

$ git branch develop

Add c.

Add e.
中で起きている事
使ってみる

remote

local

Merge branch ’develop’

Merge branch ’develop’

master←HEAD develop

master

Add c.

Add e.

$ git commit -m ’Add f.’

Add c.

Add e.
中で起きている事
使ってみる

remote

local
Add f.
master←HEAD
Merge branch ’develop’

Merge branch ’develop’

develop

master

Add c.

Add e.

$ git commit -m ’Add f.’

Add c.

Add e.
中で起きている事
使ってみる

remote

local
Add f.
master←HEAD
Merge branch ’develop’

Merge branch ’develop’

develop

master

Add c.

Add e.

Add c.

$ git push origin master
origin に master branch が有るか確認 (有る)

Add e.
中で起きている事
使ってみる

remote

local
Add f.
master←HEAD
Merge branch ’develop’

Merge branch ’develop’

develop

master

Add c.

Add e.

Add c.

Add e.

$ git push origin master
origin の master branch と同じ commit が
local の master branch の 先祖か確認 (先祖である)
中で起きている事
使ってみる

remote

local
Add f.
master←HEAD
Merge branch ’develop’

Merge branch ’develop’

develop

master

Add c.

Add e.

Add c.

Add e.

$ git push origin master
origin に master branch をコピー
(新しい commit, ファイルの転送と master branch の移動)
中で起きている事
使ってみる

remote

local
Add f.
master←HEAD

Add f.
master

Merge branch ’develop’

Merge branch ’develop’

develop
Add c.

Add e.

Add c.

Add e.

$ git push origin master
origin に master branch をコピー
(新しい commit, ファイルの転送と master branch の移動)
中で起きている事
使ってみる

remote

local
Add f.
master←HEAD

Add f.
master

Merge branch ’develop’

Merge branch ’develop’

develop
Add c.

Add e.

Add c.

$ git push origin develop
origin に develop branch が有るか確認 (無い)

Add e.
中で起きている事
使ってみる

remote

local
Add f.
master←HEAD

Add f.
master

Merge branch ’develop’

Merge branch ’develop’

develop
Add c.

Add e.

$ git push origin develop
origin に develop branch をコピー
(branch の作成のみ)

Add c.

Add e.
中で起きている事
使ってみる

remote

local
Add f.
master←HEAD

Add f.
master

Merge branch ’develop’

Merge branch ’develop’

develop

develop

Add c.

Add e.

$ git push origin develop
origin に develop branch をコピー
(branch の作成のみ)

Add c.

Add e.
git push コマンド補足
使ってみる

git push URI source-branch[:destination-branch]
で source-branch を URI の destination-branch にコピー
destination-branch のデフォルトは source-branch
git push URI :destination-branch
で URI の destination-branch を削除
(空の branch をコピーすると思えば良い)
remote repository の branch を削除しても local
repository の branch は残る
commit のコピーとは、commit 自身, その先祖の全
commit, 各 commit で必要な全ファイル、ディレクトリ
のコピー
ここまでのまとめ
過去の履歴を活用する

git init --bare で remote repository を作成
git remote は remote repository URI のエイリアスの一覧
表示、作成

git push は remote repository へ local repository のコピー
を作成
clone
複数人で開発する

repository のコピーを作成
clone repository の作成
$ git clone ˜/remote rep ˜/clone rep
$ cd ˜/clone rep
clone
複数人で開発する

repository のコピーを作成
現在の repository 一覧を表示

$ git branch -a
* master
remotes/origin/HEAD ->origin/master
remotes/origin/master
remotes/origin/develop
clone
複数人で開発する

repository のコピーを作成
develop branch の作成
$ git branch develop remotes/origin/develop
中で起きている事
複数人で開発する

clone

remote
Add f.
master←HEAD

Merge branch ’develop’
develop

$ git clone ˜/remote rep ˜/clone rep
$ cd ˜/clone rep
中で起きている事
複数人で開発する

clone

remote
Add f.
master←HEAD

Merge branch ’develop’
develop

$ git clone ˜/remote rep ˜/clone rep
$ cd ˜/clone rep
remote rep の全 branch, HEAD を
remote branch としてコピー
中で起きている事
複数人で開発する

clone

remote
Add f.
master←HEAD

Add f.
remotes/origin/master remotes/origin/HEAD

Merge branch ’develop’

Merge branch ’develop’

develop

remotes/origin/develop

$ git clone ˜/remote rep ˜/clone rep
$ cd ˜/clone rep
remote rep の全 branch, HEAD を
remote branch としてコピー
中で起きている事
複数人で開発する

clone

remote
Add f.
master←HEAD

Add f.
remotes/origin/master remotes/origin/HEAD

Merge branch ’develop’

Merge branch ’develop’

develop

remotes/origin/develop

$ git clone ˜/remote rep ˜/clone rep
$ cd ˜/clone rep
remotes/origin/HEAD を元に master branch を作成
中で起きている事
複数人で開発する

clone

remote

Add f.
master←HEAD

Add f.
master←HEAD

remotes/origin/master remotes/origin/HEAD

Merge branch ’develop’

Merge branch ’develop’

develop

remotes/origin/develop

$ git clone ˜/remote rep ˜/clone rep
$ cd ˜/clone rep
remotes/origin/HEAD を元に master branch を作成
中で起きている事
複数人で開発する

clone

remote

Add f.
master←HEAD

Add f.
master←HEAD

remotes/origin/master remotes/origin/HEAD

Merge branch ’develop’

Merge branch ’develop’

develop

remotes/origin/develop

$ git branch -a
* master
remotes/origin/HEAD ->origin/master
remotes/origin/develop
remotes/origin/master
中で起きている事
複数人で開発する

clone

remote
Add f.
master←HEAD

Add f.
master←HEAD
remotes/origin/master remotes/origin/HEAD

Merge branch ’develop’

Merge branch ’develop’

develop

remotes/origin/develop

$ git branch develop remotes/origin/develop
remotes/origin/develop を元に develop branch を作成
中で起きている事
複数人で開発する

clone

remote
Add f.
master←HEAD

Add f.
master←HEAD
remotes/origin/master remotes/origin/HEAD

Merge branch ’develop’
Merge branch ’develop’
develop

develop
remotes/origin/develop

$ git branch develop remotes/origin/develop
remotes/origin/develop を元に develop branch を作成
git clone コマンド補足
複数人で開発する

git clone URI [directory ]
で remote repository の clone を directory に作成
directory のデフォルトは URI の reopsitory 名
git の top directory はいつでも変更してよい
git clone 時に指定した URI は、origin というエイリアス
で登録される
git branch -a
で全ての remote branch が閲覧可能
master 以外の必要な branch は
git branch branch-name start-point で作成
(remote branch は閲覧専用として使用するべき)
fetch
複数人で開発する

remote repository の更新を反映
local rep で更新
$
$
$
$

cd ˜/local rep
git add g
git commit -m ’Add g.’
git push origin master
fetch
複数人で開発する

remote repository の更新を反映
clone rep に反映
$ cd ˜/clone rep
$ git fetch --all -p
$ git merge remotes/origin/master
中で起きている事
複数人で開発する

remote

local

clone

Add f.
master←HEAD
Add f.

Add f.

remotes/origin/master
中で起きている事
複数人で開発する

remote

local

clone

Add g.
Add f.
master←HEAD
Add f.

Add f.

$ cd ˜/local rep
$ git add g
$ git commit -m ’Add g.’

remotes/origin/master
中で起きている事
複数人で開発する

remote

local
Add g.

clone

Add g.
Add f.
master←HEAD

Add f.

Add f.

$ git push origin master

remotes/origin/master
中で起きている事
複数人で開発する

remote

local
Add g.

clone

Add g.
Add f.
master←HEAD

Add f.

$ cd ˜/clone rep

Add f.

remotes/origin/master
中で起きている事
複数人で開発する

remote

local
Add g.

clone

Add g.
Add f.
master←HEAD

Add f.

Add f.

remotes/origin/master

$ git fetch --all -p
remotes 以下の branch を最新版にバージョンアップ
中で起きている事
複数人で開発する

remote

local
Add g.

Add g.

clone
Add g.
remotes/origin/master

Add f.

Add f.

Add f.
master←HEAD

$ git fetch --all -p
remotes 以下の branch を最新版にバージョンアップ
中で起きている事
複数人で開発する

remote

local
Add g.

clone
Add g.

Add g.

remotes/origin/master

Add f.

Add f.

Add f.
master←HEAD

$ git merge remotes/origin/master
master に remotes/origin/master の更新を適用
中で起きている事
複数人で開発する

remote

local
Add g.

clone
Add g.

Add g.

master←HEAD
remotes/origin/master

Add f.

Add f.

$ git merge remotes/origin/master
master に remotes/origin/master の更新を適用

Add f.
ここまでのまとめ
複数人で開発する

git clone は remote repository の clone を作成
clone には remote repository の全 branch が remote
branch として登録済み
remote repository にある branch を local に作成するには
git branch を使う
git fetch は remote branch を最新状態に更新
remote repository の更新を適用するには
fetch の後に、remote branch を merge すれば良い
remote repository は読み込み専用で使うべき
同時更新
更新が競合したら

local rep と clone rep で同時更新
local rep で更新
$
$
$
$
$

cd ˜/local rep
touch h
git add h
git commit -m ’Add h.’
git push origin master
同時更新
更新が競合したら

local rep と clone rep で同時更新
clone rep で更新
$
$
$
$
$

cd ˜/clone rep
touch i
git add i
git commit -m ’Add i.’
git push origin master (失敗)
同時更新
更新が競合したら

local rep と clone rep で同時更新
clone rep で local rep の更新を取り込み、再 push
$ git fetch --all -p
$ git merge remotes/origin/master
$ git push origin master
同時更新
更新が競合したら

local rep と clone rep で同時更新
local rep に clone rep の更新を取り込む
$ cd ˜/local rep
$ git fetch --all -p
$ git merge remotes/origin/master
中で起きている事
更新が競合したら

remote

local

Add f.
master

Add f.
master

clone

Add f.
master
中で起きている事
更新が競合したら

remote

local

Add f.
master

$
$
$
$

cd ˜/local rep
touch h
git add h
git commit -m ’Add h.’

Add f.
master

clone

Add f.
master
中で起きている事
更新が競合したら

remote

local

clone

Add h.
master
Add f.

$
$
$
$

cd ˜/local rep
touch h
git add h
git commit -m ’Add h.’

Add f.
master

Add f.
master
中で起きている事
更新が競合したら

remote

local

clone

Add h.
master
Add f.

$ git push origin master

Add f.
master

Add f.
master
中で起きている事
更新が競合したら

remote

local

Add h.
master

clone

Add h.
master

Add f.

$ git push origin master

Add f.

Add f.
master
中で起きている事
更新が競合したら

remote

local

Add h.
master

Add h.
master

Add f.

$
$
$
$

clone

cd ˜/clone rep
touch i
git add i
git commit -m ’Add i.’

Add f.

Add f.
master
中で起きている事
更新が競合したら

remote

local

Add h.
master

Add h.
master

Add f.

$
$
$
$

cd ˜/clone rep
touch i
git add i
git commit -m ’Add i.’

Add f.

clone

Add i.
master
Add f.
中で起きている事
更新が競合したら

remote

local

Add h.
master

Add h.
master

Add f.

Add f.

$ git push origin master
origin に master branch が有るか確認 (有る)

clone

Add i.
master
Add f.
中で起きている事
更新が競合したら

remote

local

Add h.
master

clone

Add h.
master

Add f.

Add f.

Add i.
master
Add f.

$ git push origin master
origin の master branch と同じ commit が
local の master branch の先祖か確認 (先祖ではない)
中で起きている事
更新が競合したら

remote

local

Add h.
master

Add h.
master

Add f.

Add f.

clone

Add i.
master
Add f.

$ git push origin master
無理に push すると “Add h.” という commit が branch から
外れてしまう
中で起きている事
更新が競合したら

remote

local

Add h.
master

Add h.

Add f.

clone

Add i.
master

Add f.

Add i.
master
Add f.

$ git push origin master
無理に push すると “Add h.” という commit が branch から
外れてしまう
中で起きている事
更新が競合したら

remote

local

Add h.
master

Add h.
master

Add f.

Add f.

$ git push origin master
データ損失防止のため、git が失敗させる

clone

Add i.
master
Add f.
中で起きている事
更新が競合したら

remote

local

Add h.
master
Add f.

$ git fetch --all -p

Add h.
master
Add f.

clone

Add i.
master
Add f.
中で起きている事
更新が競合したら

remote

local

Add h.
master
Add f.

$ git fetch --all -p

Add h.
master
Add f.

clone

Add h.

Add i.
master

Add f.
中で起きている事
更新が競合したら

remote

local

Add h.
master
Add f.

Add h.
master
Add f.

$ git merge remotes/origin/master

clone

Add h.

Add i.
master

Add f.
中で起きている事
更新が競合したら

remote

local

clone
Merge remote-...

Add h.
master
Add f.

Add h.
master
Add f.

$ git merge remotes/origin/master

master
Add h.

Add i.

Add f.
中で起きている事
更新が競合したら

remote

local

clone
Merge remote-...

Add h.
master

Add h.
master

Add f.

Add f.

$ git push origin master
origin に master branch が有るか確認 (有る)

master
Add h.

Add i.

Add f.
中で起きている事
更新が競合したら

remote

local

clone
Merge remote-...

Add h.
master

Add h.
master

Add f.

Add f.

master
Add h.

Add i.

Add f.

$ git push origin master
origin の master branch と同じ commit が
local の master branch の先祖か確認 (“Add h.” が相当)
中で起きている事
更新が競合したら

remote

local

clone
Merge remote-...

Add h.
master

Add h.
master

Add f.

Add f.

$ git push origin master
origin に master branch をコピー

master
Add h.

Add i.

Add f.
中で起きている事
更新が競合したら

remote

local

clone

Merge remote-...
Add h.
master

Merge remote-...

master

master

Add h.

Add f.

Add i.

Add f.

$ git push origin master
origin に master branch をコピー

Add h.

Add i.

Add f.
中で起きている事
更新が競合したら

remote

local

clone

Merge remote-...
Add h.
master
Add f.

Merge remote-...

master

master

Add h.

Add i.

Add f.

$ cd ˜/local rep
$ git fetch --all -p
$ git merge remotes/origin/master

Add h.

Add i.

Add f.
中で起きている事
更新が競合したら

remote

local

clone

Merge remote-...

Merge remote-...

Merge remote-...

master

master

master

Add h.

Add i.

Add f.

Add h.

Add i.

Add f.

$ cd ˜/local rep
$ git fetch --all -p
$ git merge remotes/origin/master

Add h.

Add i.

Add f.
衝突 (一旦停止)
更新が競合したら

merge を一旦停止して、解決してから 再 merge
準備

$ cd ˜/local rep
$ git branch conflict1
$ git branch conflict2
衝突 (一旦停止)
更新が競合したら

merge を一旦停止して、解決してから 再 merge
conflict1 で更新
$
$
$
$

git checkout conflict1
echo “conflict1” >> f
git add f
git commit -m ’Update 1.’
衝突 (一旦停止)
更新が競合したら

merge を一旦停止して、解決してから 再 merge
conflict2 で更新
$
$
$
$

git checkout conflict2
echo “conflict2” >> f
git add f
git commit -m ’Update 2.’
衝突 (一旦停止)
更新が競合したら

merge を一旦停止して、解決してから 再 merge
conflict2 で conflict1 と merge (衝突)
$ git merge conflict1
衝突 (一旦停止)
更新が競合したら

merge を一旦停止して、解決してから 再 merge
merge を一旦停止
$ git merge --abort
衝突 (一旦停止)
更新が競合したら

merge を一旦停止して、解決してから 再 merge
衝突しない様に編集、commit してから再度 merge

$
$
$
$

vi f
git add f
git commit -m ’Escape conflict.’
git merge conflict1
中で起きている事
更新が競合したら

repository
workspace
cdefghi
cached (index)
cdefghi
Merge remote-tracking branch ...
中で起きている事
更新が競合したら

repository
workspace
cdefghi
cached (index)
cdefghi
Merge remote-tracking branch ...

$ cd ˜/local rep
$ git branch conflict1
$ git branch conflict2
中で起きている事
更新が競合したら

repository
workspace
cdefghi
cached (index)
cdefghi
Merge remote-tracking branch ...

$
$
$
$

git checkout conflict1
echo “conflict1” >> f
git add f
git commit -m ’Update1’
中で起きている事
更新が競合したら

repository
workspace
cdefghi
cached (index)
cdefghi

Update 1.
conflict1
Merge remote-tracking branch ...

$
$
$
$

git checkout conflict1
echo “conflict1” >> f
git add f
git commit -m ’Update1’
中で起きている事
更新が競合したら

repository
workspace
cdefghi
cached (index)
cdefghi

Update 1.
conflict1
Merge remote-tracking branch ...

$
$
$
$

git checkout conflict2
echo “conflict2” >> f
git add f
git commit -m ’Update2’
中で起きている事
更新が競合したら

repository
workspace
cdefghi
cached (index)
cdefghi

Update 1.

Update 2.

conflict1

conflict2

Merge remote-tracking branch ...

$
$
$
$

git checkout conflict2
echo “conflict2” >> f
git add f
git commit -m ’Update2’
中で起きている事
更新が競合したら

repository
workspace
cdefghi
cached (index)
cdefghi

Update 1.

Update 2.

conflict1

conflict2

Merge remote-tracking branch ...

$ git merge conflict1
workspace に無理矢理両方の更新を適用した状態
中で起きている事
更新が競合したら

repository
workspace
cdefghi
cached (index)
cdefghi

Update 1.

Update 2.

conflict1

conflict2

Merge remote-tracking branch ...

$ git merge conflict1
workspace に無理矢理両方の更新を適用した状態
中で起きている事
更新が競合したら

repository
workspace
cdefghi
cached (index)
cdefghi

Update 1.

Update 2.

conflict1

conflict2

Merge remote-tracking branch ...

$ git merge --abort
前回の git merge を行う前の状態に戻す
中で起きている事
更新が競合したら

repository
workspace
cdefghi
cached (index)
cdefghi

Update 1.

Update 2.

conflict1

conflict2

Merge remote-tracking branch ...

$ git merge --abort
前回の git merge を行う前の状態に戻す
中で起きている事
更新が競合したら

repository
workspace
cdefghi
cached (index)
cdefghi

Update 1.

Update 2.

conflict1

conflict2

Merge remote-tracking branch ...

$ vi f
$ git add f
$ git commit -m ’Escape conflict.’
conflict を起こさないように f を修正
中で起きている事
更新が競合したら

repository
workspace
cdefghi
cached (index)
cdefghi

Escape conflict.
Update 1.

conflict2

conflict1

Update 2.

Merge remote-tracking branch ...

$ vi f
$ git add f
$ git commit -m ’Escape conflict.’
conflict を起こさないように f を修正
中で起きている事
更新が競合したら

repository
workspace
cdefghi
cached (index)
cdefghi

Escape conflict.
Update 1.

conflict2

conflict1

Update 2.

Merge remote-tracking branch ...

$ git merge conflict1
merge 成功
中で起きている事
更新が競合したら

repository
Merge bra...

workspace
cdefghi
cached (index)
cdefghi

conflict2
Update 1.

Escape conflict.

conflict1

Update 2.

Merge remote-tracking branch ...

$ git merge conflict1
merge 成功
衝突 (解決)
更新が競合したら

衝突をその場で解決
準備

$ cd ˜/local rep
$ git branch conflict3
衝突 (解決)
更新が競合したら

衝突をその場で解決

conflict3 で更新
$
$
$
$

git checkout conflict3
echo “conflict3” >> f
git add f
git commit -m ’Update 3.’
衝突 (解決)
更新が競合したら

衝突をその場で解決

conflict3 で conflict1 と merge (衝突)
$ git merge conflict1
衝突 (解決)
更新が競合したら

衝突をその場で解決
衝突しない様に編集、commit してから再度 merge

$ vi f
$ git add f
$ git commit
中で起きている事
更新が競合したら

repository
workspace
cdefghi
Update 1.

cached (index)
cdefghi

conflict1
Merge remote-tracking branch ...
中で起きている事
更新が競合したら

repository
workspace
cdefghi
Update 1.

cached (index)
cdefghi
$ cd ˜/local rep
$ git branch conflict3

conflict1
Merge remote-tracking branch ...
中で起きている事
更新が競合したら

repository
workspace
cdefghi
Update 1.

cached (index)
cdefghi
$
$
$
$

git checkout conflict3
echo “conflict3” >> f
git add f
git commit -m ’Update3’

conflict1
Merge remote-tracking branch ...
中で起きている事
更新が競合したら

repository
workspace
cdefghi
Update 1.

cached (index)
cdefghi
$
$
$
$

git checkout conflict3
echo “conflict3” >> f
git add f
git commit -m ’Update3’

Update 3.

conflict1

conflict3

Merge remote-tracking branch ...
中で起きている事
更新が競合したら

repository
workspace
cdefghi
Update 1.

cached (index)
cdefghi

Update 3.

conflict1

conflict3

Merge remote-tracking branch ...

$ git merge conflict1
workspace に無理矢理両方の更新を適用した状態
中で起きている事
更新が競合したら

repository
workspace
cdefghi
Update 1.

cached (index)
cdefghi

Update 3.

conflict1

conflict3

Merge remote-tracking branch ...

$ git merge conflict1
workspace に無理矢理両方の更新を適用した状態
中で起きている事
更新が競合したら

repository
workspace
cdefghi
Update 1.

cached (index)
cdefghi
$ vi f
$ git add f

Update 3.

conflict1

conflict3

Merge remote-tracking branch ...
中で起きている事
更新が競合したら

repository
workspace
cdefghi
Update 1.

cached (index)
cdefghi
$ vi f
$ git add f

Update 3.

conflict1

conflict3

Merge remote-tracking branch ...
中で起きている事
更新が競合したら

repository
workspace
cdefghi
Update 1.

cached (index)
cdefghi
$ git commit

Update 3.

conflict1

conflict3

Merge remote-tracking branch ...
中で起きている事
更新が競合したら

repository
workspace
cdefghi

Merge bra...
Update 1.

cached (index)
cdefghi
$ git commit

conflict3

conflict1

Update 3.

Merge remote-tracking branch ...
conflict 補足
更新が競合したら

git merge --abort の過信は禁物
workspace や cached が clean で無い場合 11 、正しく戻ら
ない可能性がある

conflict 解決時、勝手に他人の更新を変更する事は危険
自分の更新を変更するか、競合する更新をした人に確認
するべき

abort せずに直接 conflict を解消する際は、
競合部分の削除と順番入れ替えのみで対応するべき
(先祖の commit に含まれない更新を merge commit に入
れるべきではない)
(これ以外の手段で conflict を解消する方法は evil merge
と言われている)
11

未 commit のファイルがある状態
更新者の確認
その他

問題のファイルの何行目を、誰がいつ加えたか(変更したか)
調べる

$ git blame f
9e7563ff (Your Name 2014-01-03 15:18:02 +0900 1) test
ここまでのまとめ
更新が競合したら

local repository に remote repository の最新情報が含まれ
ていないと git push は失敗する
そのような場合は local repository を最新にしてから再
push すると良い
merge 時に conflict が発生した際に取る方法は、merge
取りやめか conflict 解消の 2 通り
merge を取りやめて、衝突しないように commit してか
ら再度 merge する事も可能
git blame はファイルの更新者を行単位で表示
revert
その他

特定の commit を打ち消す commit を行う
(commit とその親 commit の差分を打ち消す)
戻したいバージョン (例えば、“Add h.” という commit ) の
commit のハッシュ値を確認

$ git log --graph
...
(環境ごとに commit のハッシュ値は異なるので注意)
今回は 06d957bc3322557eb76fc86ee87b66c0288d3c08 とする
revert
その他

特定の commit を打ち消す commit を行う
(commit とその親 commit の差分を打ち消す)

$ git revert 06d912

12

“Add i.” の commit
中で起きている事
その他

repository
workspace
cdefghi
Merge remote-...

cached (index)
cdefghi

Add h.

Add i.

Add f.
中で起きている事
その他

repository
workspace
cdefghi
Merge remote-...

cached (index)
cdefghi

Add h.

Add i.

Add f.

$ git revert 06d9
06d9 (“Add h.” の commit) の変更 (06d9 とその親 commit
の差分)
の逆を、workspace と cached に行う
中で起きている事
その他

repository
workspace
cdefg i
Merge remote-...

cached (index)
cdefg i

Add h.

Add i.

Add f.

$ git revert 06d9
06d9 (“Add h.” の commit) の変更 (06d9 とその親 commit
の差分)
の逆を、workspace と cached に行う
中で起きている事
その他

repository
workspace
cdefg i
Merge remote-...

cached (index)
cdefg i

Add h.

Add i.

Add f.

$ git revert 06d9
git commit を行う
中で起きている事
その他

repository
workspace
cdefg i

Revert “Add h.”...
Merge remote-...

cached (index)
cdefg i

Add h.

Add i.

Add f.

$ git revert 06d9
git commit を行う
git revert コマンド補足
その他

git revert commit1 [commit2 [commit3 ...]]
で特定の commit の変更を打ち消す commit を行う
親が複数存在する commit13 を指定するには、-m という
オプションが必要
(今回の範囲を超えるので詳細は割愛)

13

git merge で作成された commit
tag
commit に移動しない名前をつける
現在の tag 一覧を表示

$ git tag
tag は無いので何も表示されない
tag
commit に移動しない名前をつける
tag を作成
$ git tag v0.0.1
HEAD の向いている commit に対して v0.0.1 という tag をつ
ける
tag
commit に移動しない名前をつける
$ git tag
tag 一覧を表示
v0.0.1
tag
commit に移動しない名前をつける
$ git tag -d v0.0.1
tag v0.0.1 を削除
tag
commit に移動しない名前をつける
現在の tag 一覧を表示

$ git tag
tag は無いので何も表示されない
tag
コマンド補足

git tag tag-name [commit]
で commit を指す tag を作成
commit は branch, HEAD, ハッシュ値等で指定
commit のデフォルトは HEAD
tag を remote repository へ転送するには
git push URI tag tag-name
remote repository の tag を削除するには
git push URI :refs/tags/tag-name
remote repository の tag も git fetch --all -p で取得可能
merge や checkout の commit 指定に tag も使用可能
ただし、その場合 HEAD が branch から外れるので注意
ここまでのまとめ
その他

git revert は過去の commit を打ち消す commit 作成
remote repository に push する前なら、他の方法 14 で
代用出来ないか考えた方が良い
(不要な commit と打ち消す commit が有るより、両方無
い方が良い場合が多い)

git tag は tag 一覧表示、作成、削除
branch や HEAD は移動するが tag は移動しないので、
リリースヴァージョン管理等に使用可能

14

git reset 等
最後に
もっと git を勉強するには

man を読む
公式ガイドを読む
一般的な git の開発フローを学ぶ
などの方法がおすすめ
最後に
man の探し方
git の man は、“git” と最初の引数を “-” でつなげた物を読む
例) $ man git-add
最後に
man の探し方
git の man は、“git” と最初の引数を “-” でつなげた物を読む
例) $ man git-add
最初の引数まで入力して --help と入力しても同じ
例) $ git add --help
最後に
man の探し方
git の man は、“git” と最初の引数を “-” でつなげた物を読む
例) $ man git-add
最初の引数まで入力して --help と入力しても同じ
例) $ git add --help
そもそも最初の引数が分からない場合や、
git でどんな事が出来るか知りたい場合は
git の man を引く

$ man git
最後に
公式ガイドの見方

$ git help -g
で git のガイド一覧を表示
最後に
$ git help -g
The common Git guides are:
attributes Defining attributes per path
glossary A Git glossary
ignore Specifies intentionally untracked files to ignore
modules Defining submodule properties
revisions Specifying revisions and ranges for Git
tutorial A tutorial introduction to Git (for version 1.5.1 or newer)
workflows An overview of recommended workflows with Git
’git help -a’ and ’git help -g’ lists available subcommands and some
concept guides. See ’git help <command>’ or ’git help
<concept>’
to read about a specific subcommand or concept.
最後に
興味があるガイドをみつけたら

$ git help <concept>
で閲覧
例) git help tutorial
最後に
一般的な開発フローについて学ぶ
本勉強会ではあまり触れませんでしたが
best practice についても勉強すると面白いかも
まずは、git flow と github flow を勉強すると良いと思います
最後に
“git 次の一歩” も開催予定なので、
興味のある方は来てください

More Related Content

What's hot

Go言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 springGo言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 springTakuya Ueda
 
Go言語によるwebアプリの作り方
Go言語によるwebアプリの作り方Go言語によるwebアプリの作り方
Go言語によるwebアプリの作り方Yasutaka Kawamoto
 
Serf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfraSerf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfraNaotoshi Seo
 
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門icchy
 
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)nabe-abk
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプトbsdhack
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目龍一 田中
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみるairtoxin Ishii
 
PythonでRakeもどきを作ってみた
PythonでRakeもどきを作ってみたPythonでRakeもどきを作ってみた
PythonでRakeもどきを作ってみたkwatch
 
シェル芸初心者によるシェル芸入門 (修正版)
シェル芸初心者によるシェル芸入門 (修正版)シェル芸初心者によるシェル芸入門 (修正版)
シェル芸初心者によるシェル芸入門 (修正版)icchy
 
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようmax747
 
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyotoGo言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyotoShoot Morii
 
Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)Teloo
 
自分のPcに仮想環境を作ってlinuxをインストールしてみよう
自分のPcに仮想環境を作ってlinuxをインストールしてみよう自分のPcに仮想環境を作ってlinuxをインストールしてみよう
自分のPcに仮想環境を作ってlinuxをインストールしてみようNaoyuki Sano
 
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Naotoshi Seo
 
ROS Tutorial 02 - CIT
ROS Tutorial 02 - CITROS Tutorial 02 - CIT
ROS Tutorial 02 - CITDaiki Maekawa
 
Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Atsuo Ishimoto
 

What's hot (20)

Go言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 springGo言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 spring
 
Go言語によるwebアプリの作り方
Go言語によるwebアプリの作り方Go言語によるwebアプリの作り方
Go言語によるwebアプリの作り方
 
Serf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfraSerf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfra
 
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門
 
Stream2の基本
Stream2の基本Stream2の基本
Stream2の基本
 
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
 
initramfsについて
initramfsについてinitramfsについて
initramfsについて
 
ICHIGEKI-MT 2015/03/14
ICHIGEKI-MT 2015/03/14ICHIGEKI-MT 2015/03/14
ICHIGEKI-MT 2015/03/14
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる2日間Fabricを触った俺が
 色々解説してみる
2日間Fabricを触った俺が
 色々解説してみる
 
PythonでRakeもどきを作ってみた
PythonでRakeもどきを作ってみたPythonでRakeもどきを作ってみた
PythonでRakeもどきを作ってみた
 
シェル芸初心者によるシェル芸入門 (修正版)
シェル芸初心者によるシェル芸入門 (修正版)シェル芸初心者によるシェル芸入門 (修正版)
シェル芸初心者によるシェル芸入門 (修正版)
 
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしよう
 
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyotoGo言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
 
Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)
 
自分のPcに仮想環境を作ってlinuxをインストールしてみよう
自分のPcに仮想環境を作ってlinuxをインストールしてみよう自分のPcに仮想環境を作ってlinuxをインストールしてみよう
自分のPcに仮想環境を作ってlinuxをインストールしてみよう
 
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~
 
ROS Tutorial 02 - CIT
ROS Tutorial 02 - CITROS Tutorial 02 - CIT
ROS Tutorial 02 - CIT
 
Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料
 

Viewers also liked

Visual Studio2013 でGithub(1) セットアップ~同期
Visual Studio2013 でGithub(1) セットアップ~同期Visual Studio2013 でGithub(1) セットアップ~同期
Visual Studio2013 でGithub(1) セットアップ~同期Tomo Mizoe
 
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級Kouji Matsui
 
10 Insightful Quotes On Designing A Better Customer Experience
10 Insightful Quotes On Designing A Better Customer Experience10 Insightful Quotes On Designing A Better Customer Experience
10 Insightful Quotes On Designing A Better Customer ExperienceYuan Wang
 
How to Build a Dynamic Social Media Plan
How to Build a Dynamic Social Media PlanHow to Build a Dynamic Social Media Plan
How to Build a Dynamic Social Media PlanPost Planner
 
Learn BEM: CSS Naming Convention
Learn BEM: CSS Naming ConventionLearn BEM: CSS Naming Convention
Learn BEM: CSS Naming ConventionIn a Rocket
 
SEO: Getting Personal
SEO: Getting PersonalSEO: Getting Personal
SEO: Getting PersonalKirsty Hulse
 
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika AldabaLightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldabaux singapore
 

Viewers also liked (8)

Visual Studio2013 でGithub(1) セットアップ~同期
Visual Studio2013 でGithub(1) セットアップ~同期Visual Studio2013 でGithub(1) セットアップ~同期
Visual Studio2013 でGithub(1) セットアップ~同期
 
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級
 
10 Insightful Quotes On Designing A Better Customer Experience
10 Insightful Quotes On Designing A Better Customer Experience10 Insightful Quotes On Designing A Better Customer Experience
10 Insightful Quotes On Designing A Better Customer Experience
 
How to Build a Dynamic Social Media Plan
How to Build a Dynamic Social Media PlanHow to Build a Dynamic Social Media Plan
How to Build a Dynamic Social Media Plan
 
Learn BEM: CSS Naming Convention
Learn BEM: CSS Naming ConventionLearn BEM: CSS Naming Convention
Learn BEM: CSS Naming Convention
 
SEO: Getting Personal
SEO: Getting PersonalSEO: Getting Personal
SEO: Getting Personal
 
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika AldabaLightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
 
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job? Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
 

Similar to git 初めの一歩

Similar to git 初めの一歩 (20)

Git (実践入門編)
Git (実践入門編)Git (実践入門編)
Git (実践入門編)
 
RedmineとGitとスクラム
RedmineとGitとスクラムRedmineとGitとスクラム
RedmineとGitとスクラム
 
Git overview (v 0.96)
Git overview (v 0.96)Git overview (v 0.96)
Git overview (v 0.96)
 
Git (運用編)
Git (運用編)Git (運用編)
Git (運用編)
 
Capistrano
CapistranoCapistrano
Capistrano
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンド
 
今さら聞けない人のためのgit超入門
今さら聞けない人のためのgit超入門今さら聞けない人のためのgit超入門
今さら聞けない人のためのgit超入門
 
Git-dojo In Sendagaya.rb
Git-dojo In Sendagaya.rbGit-dojo In Sendagaya.rb
Git-dojo In Sendagaya.rb
 
Git
GitGit
Git
 
Git 実践入門
Git 実践入門Git 実践入門
Git 実践入門
 
Git勉強会
Git勉強会Git勉強会
Git勉強会
 
Version Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルVersion Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアル
 
P4p20120408
P4p20120408P4p20120408
P4p20120408
 
今さら聞けない人のためのGit超入門
今さら聞けない人のためのGit超入門今さら聞けない人のためのGit超入門
今さら聞けない人のためのGit超入門
 
Mercurial入門(後半)
Mercurial入門(後半)Mercurial入門(後半)
Mercurial入門(後半)
 
Git for beginners
Git for beginnersGit for beginners
Git for beginners
 
ソフトウェア工学2023 08 GitHub
ソフトウェア工学2023 08 GitHubソフトウェア工学2023 08 GitHub
ソフトウェア工学2023 08 GitHub
 
猫にはわからないGit講座
猫にはわからないGit講座猫にはわからないGit講座
猫にはわからないGit講座
 
Git 勉強会
Git 勉強会Git 勉強会
Git 勉強会
 
バージョン管理システムチュートリアル
バージョン管理システムチュートリアルバージョン管理システムチュートリアル
バージョン管理システムチュートリアル
 

Recently uploaded

ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦Sadao Tokuyama
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 

Recently uploaded (12)

ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 

git 初めの一歩