Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Git入門
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Seiya
July 23, 2021
Technology
32
21k
Git入門
大学サークルのイントロ用資料です
Gitに入門します
resetやrevertも入れたらよかった気がしています
Seiya
July 23, 2021
Tweet
Share
More Decks by Seiya
See All by Seiya
ATProtocol ざっくり概要把握してみた @ DWeb Tokyo Meetup #2
silmin_
0
23
おうちGitLabのススメ
silmin_
3
1.6k
暗号について
silmin_
0
170
LinuxCommand入門
silmin_
0
380
LinuxCommand入門2
silmin_
0
270
Webについて
silmin_
3
190
ネットワークとは
silmin_
0
250
コンピュータとは|初心者向け資料
silmin_
1
190
ビットについて|入門者向け資料
silmin_
0
210
Other Decks in Technology
See All in Technology
俺の失敗を乗り越えろ!メーカーの開発現場での失敗談と乗り越え方 ~ゆるゆるチームリーダー編~
spiddle
0
350
2026-02-25 Tokyo dbt meetup プロダクトと融合したCI/CD で実現する、堅牢なデータパイプラインの作り方
y_ken
0
140
AIで 浮いた時間で 何をする? 2026春 #devsumi
konifar
16
3.3k
AWS CDK の目玉新機能「Mixins」とは / cdk-mixins
gotok365
2
270
社内ワークショップで終わらせない 業務改善AIエージェント開発
lycorptech_jp
PRO
1
380
Snowflake Night #2 LT
taromatsui_cccmkhd
0
190
Databricks (と気合い)で頑張るAI Agent 運用
kameitomohiro
0
300
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4k
LINEヤフーにおけるAI駆動開発組織のプロデュース施策
lycorptech_jp
PRO
0
160
Snowflakeデータ基盤で挑むAI活用 〜4年間のDataOpsの基礎をもとに〜
kaz3284
1
220
Devinを導入したら予想外の人たちに好評だった
tomuro
0
230
AI時代のAPIファースト開発
nagix
2
620
Featured
See All Featured
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.7k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
75
From π to Pie charts
rasagy
0
140
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
360
First, design no harm
axbom
PRO
2
1.1k
Testing 201, or: Great Expectations
jmmastey
46
8.1k
Technical Leadership for Architectural Decision Making
baasie
2
270
How STYLIGHT went responsive
nonsquared
100
6k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
470
Exploring anti-patterns in Rails
aemeredith
2
280
Transcript
Git入門 SecPrj Intro-phase
Gitとは Gitとは、オープンソースの分散バージョン管理システムの一つ。複数の 開発者が共同で一つのソフトウェアを開発する際などに、ソースコード やドキュメントなどの編集履歴を統一的に管理するのに用いられる。 Gitとは - IT用語辞典 e-Words https://e-words.jp/w/Git.html
ソフトウェアのバージョン管理 Gitがない世界 ファイル名 最終変更日 app.py 2021/03/01 app_ver2.py 2021/05/20 app_ver3.py 2021/05/10
app_latest.py 2021/06/02 app_latest2.py 2021/05/30 で,結局どれが 最新なんすか?
ソフトウェアのバージョン管理 Gitがない世界 Gitがある世界 ファイル名 最終変更日 app.py 2021/03/01 app_ver2.py 2021/05/20 app_ver3.py
2021/05/10 app_latest.py 2021/06/02 app_latest2.py 2021/05/30 で,結局どれが 最新なんすか? ファイル名 最終変更日 .git/ 2021/06/02 app.py 2021/06/02 変更履歴(コミットログ) 機能Bを実装 関数bを実装 機能Aを修正 関数aを実装 機能Aを実装 任意の変更点を 打ち消したり 戻したりできる
複数人での作業 Gitがない世界 ファイル名 変更点 app.py 機能A,B app_func1.py 機能A app_func2.py 機能B
app_func1.py 機能A実装 app_func2.py 機能B実装 app_func1.py app.py app_func2.py A B A B 機能A,B統合
複数人での作業 Gitがない世界 Gitがある世界 ファイル名 変更点 app.py 機能A,B app_func1.py 機能A app_func2.py
機能B app_func1.py 機能A実装 ファイル名 変更点 .git/ -- app.py 機能A,B app_func2.py 機能B実装 app_func1.py app.py app_func2.py A B ブランチによる管理 main func1 func2 commit ブランチ merge A B 機能A,B統合
Gitの基本的な操作 - ステージング(add) - コミット(commit) - ステータス(status) - ブランチ(branch) -
移動(switch) - マージ(merge) - プッシュ(push) - プル(pull) - クローン(clone)
Gitでコミットする コミットツリー 未コミットの変更点A,B があるファイル群 ステージ A B
Gitでコミットする コミットツリー 未コミットの変更点A,B があるファイル群 ステージ A B A B ステージング
Gitでコミットする コミットツリー 未コミットの変更点A,B があるファイル群 ステージ A B コミット A B
ステージング コミットするとGitに 変更が記録される (コミットオブジェクトの生成)
Gitのコミット(コミットオブジェクト) A2 A1 A3 コミットはスナップショット(その時点のディレクトリ/ファイルのコピー) コミットしたファイルと各種情報を持つオブジェクトがコミットオブジェクト
Gitのコミット(コミットオブジェクト) A2 A1 A3 コミット(コミットオブジェクト)にはそれぞれコミットハッシュとよばれる SHA1ハッシュ(40文字)が振られる コミットハッシュでコミット(コミットオブジェクト)を一意に指定できる 87e9293cefb2a50ba945 7f5c79553d74eeb360fc 5b9e980753180e96ab40
41cb43c507d86bfff3f6 66e5c0862066a1c0809a 5ff693a8123ea3f6e6e5
Gitにおけるファイルのステータス ファイルには4つの状態がある Untracked(追跡されてない)/Unmodified(変更なし)/ Modified(変更あり/ステージングされていない)/Staged(ステージングされている) Git - 変更内容のリポジトリへの記録 https://git-scm.com/book/ja/v2/Git-の基本-変更内容のリポジトリへの記録
Gitでブランチを使う a b コミット ブランチ c それぞれのコミット(変更)が 他のブランチに影響していない ブランチはいわば「世界線」。あるブランチは他ブランチの変更に影響されない ex)
関数Aを実装した世界線/関数Bを実装した世界線 実装する機能やバージョンごとにブランチを切るのが一般的
ブランチを 移動して作業 Gitでブランチを使う ブランチはいわば「世界線」。あるブランチは他ブランチの変更に影響されない ex) 関数Aを実装した世界線/関数Bを実装した世界線 実装する機能やバージョンごとにブランチを切るのが一般的 a b コミット
ブランチ c それぞれのコミット(変更)が 他のブランチに影響していない
ブランチを 割振って作業 Gitでブランチを使う a b コミット ブランチ c それぞれのコミット(変更)が 他のブランチに影響していない
ブランチはいわば「世界線」。あるブランチは他ブランチの変更に影響されない ex) 関数Aを実装した世界線/関数Bを実装した世界線 実装する機能やバージョンごとにブランチを切るのが一般的
実装する機能 によって分離 Gitでブランチを使う a b コミット ブランチ c それぞれのコミット(変更)が 他のブランチに影響していない
ブランチはいわば「世界線」。あるブランチは他ブランチの変更に影響されない ex) 関数Aを実装した世界線/関数Bを実装した世界線 実装する機能やバージョンごとにブランチを切るのが一般的 A B
ブランチをマージする a b コミット マージ あるブランチの変更と別のブランチを統合/反映する 反映は基本自動で行われるが,変更の重複点のみコンフリクトを起こす コンフリクトは手動で解消する必要がある.
ブランチをマージする あるブランチの変更と別のブランチを統合/反映する 反映は基本自動で行われるが,変更の重複点のみコンフリクトを起こす コンフリクトは手動で解消する必要がある. a b コミット マージ 変更が重複すると コンフリクト
リポジトリ Git管理されているディレクトリをリポジトリ(repository)と呼ぶ ローカルリポジトリ - 手元(ローカル)にあるリポジトリ リモートリポジトリ - インターネット上などのサーバ上にあるリポジトリ リモートリポジトリ 開発者A
開発者B 複製/反映 複製/反映 変更 変更
リポジトリ Git管理されているディレクトリをリポジトリ(repository)と呼ぶ ローカルリポジトリ - 手元(ローカル)にあるリポジトリ リモートリポジトリ - インターネット上などのサーバ上にあるリポジトリ 複製がどこかにあればリモートリポジトリが死んでもある程度は復元可能 リモートリポジトリ
開発者A 開発者B 複製/反映 複製/反映 変更 変更
リポジトリ Git管理されているディレクトリをリポジトリ(repository)と呼ぶ ローカルリポジトリ - 手元(ローカル)にあるリポジトリ リモートリポジトリ - インターネット上などのサーバ上にあるリポジトリ GitHubやGitLabなどはリモートリポジトリの実装の1つ リモートリポジトリ
開発者A 開発者B 複製/反映 複製/反映 変更 変更
リモートリポジトリへの操作 リポジトリを複製(Clone) リモートリポジトリ clone ローカルの変更反映/リモートの変更反映 リモートリポジトリ pull push cloneはデフォルトで デフォルトブランチを複
製する push/pullは任意の ブランチに対して実行 (b1だけpush...など)
ハンズオン1 ローカルリポジトリを作成する
リポジトリを初期化する ディレクトリにあるファイルはそのままで, カレントディレクトリをGit管理下に置く .git/ が生成され,既にあるファイルは 追跡されていない未コミットファイルとなる $ git init $
git status
Gitでコミットする 未コミットの変更点A があるファイル ステージ A $ git diff コミットツリー Untrackedなファイルは差分表示されない
Gitでコミットする 未コミットの変更点A があるファイル ステージ A A ステージング $ git add
<filename> コミットツリー
Gitでコミットする ユーザ情報の設定 コミットユーザの情報として利用される $ git config --global user.email “your email”
$ git config --global user.name “your name” $ git config --global core.editor “nano”
Gitでコミットする 未コミットの変更点A があるファイル ステージ A コミット A $ git commit
$ git commit -m “...” or コミットツリー ステージング
Gitでコミットする コミットツリー 未コミットの変更点A があるファイル ステージ A A コミット $ git
log ステージング
Trackedなファイルであれば差分が表示される
Gitでブランチを使う master ブランチを確認する $ git branch
Gitでブランチを使う master b1 ブランチを作成する 作成したカレントブランチの情報を引き継ぐ $ git branch b1
Gitでブランチを使う master b1 カレントブランチを移動する master → b1 $ git switch
b1 $ git switch -c b1 で作成&移動も可能
Gitでブランチを使う master b1 b1で何かを変更し、コミットする このコミットはmasterに続く形になる (b1はmasterから切られているので) $ git add <filename>
$ git commit -任意の編集-
Gitでブランチを使う master b1 b1で何かを変更し、コミットする このコミットはmasterに続く形になる (b1はmasterから切られているので) $ git log
Gitでブランチを使う master b1 カレントブランチをmasterに移動 1つめのコミットしかみえない $ git switch master
Gitでブランチを使う master b1 b1ブランチをmasterブランチにマージ 変更がb1でコミットした変更が反映されている $ git merge b1
ハンズオン2 リモートリポジトリの作成/Clone/Push/Pull
リモートリポジトリのクローン,プッシュ,プル まず自分のGitHubページで新しいリポジトリを作る
リモートリポジトリのクローン,プッシュ,プル
最初のコミットがされた状態でリモートリポジトリが生成される リモートリポジトリのクローン,プッシュ,プル
$ git clone https://github.com/silmin/git-test.git リモートリポジトリのクローン,プッシュ,プル
リモートリポジトリのクローン,プッシュ,プル cloneしてきたリポジトリに変更点を加えて,コミットする
リモートリポジトリのクローン,プッシュ,プル
helloが追加されている $ git push origin main リモートリポジトリのクローン,プッシュ,プル
$ git push origin main リモートリポジトリ ブランチ
リモートリポジトリのクローン,プッシュ,プル WebUIから直接変更してみる
リモートリポジトリのクローン,プッシュ,プル リモートでの変更をローカルにプルして反映
ハンズオンおわり
gitconfigについて それぞれのリポジトリにはその設定ファイルとして .git/config がある 全てのリポジトリに適用されるグローバルな設定 ~/.gitconfig もある さっきGitHubで作った リポジトリの.git/config originはリモートリポジトリに
つけられた名前
Gitのブランチ main ブランチポインタ カレントブランチ(HEAD) ブランチの実態はただのコミットへの参照(ポインタ) ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している
Gitのブランチ temp main ブランチの実態はただのコミットへの参照(ポインタ) ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している ブランチポインタ カレントブランチ(HEAD)
$ git switch -c temp
Gitのブランチ temp main ブランチポインタ カレントブランチ(HEAD) $ git commit ... ブランチの実態はただのコミットへの参照(ポインタ)
ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している
Gitのブランチ temp main ブランチポインタ カレントブランチ(HEAD) $ git switch main ブランチの実態はただのコミットへの参照(ポインタ)
ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している
Gitのブランチ temp main ブランチポインタ カレントブランチ(HEAD) $ git commit ... ブランチの実態はただのコミットへの参照(ポインタ)
ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している
Gitのブランチ temp main ブランチポインタ カレントブランチ(HEAD) $ git merge temp ブランチの実態はただのコミットへの参照(ポインタ)
ブランチの数 ≒ ブランチポインタの数 ブランチのポインタは,それぞれ常にブランチの先頭コミットを参照している
Gitのブランチ a 2 a 1 a 3 temp main b
1 a 4 a 5 ブランチポインタ カレントブランチ(HEAD) a 1 a 2 a 3 b 1 a 4 a 5 main temp