Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Git入門
Search
Seiya
July 23, 2021
Technology
27k
38
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Git入門
大学サークルのイントロ用資料です
Gitに入門します
resetやrevertも入れたらよかった気がしています
Seiya
July 23, 2021
More Decks by Seiya
See All by Seiya
ATProtocol ざっくり概要把握してみた @ DWeb Tokyo Meetup #2
silmin_
0
79
おうちGitLabのススメ
silmin_
4
2k
暗号について
silmin_
0
220
LinuxCommand入門
silmin_
0
430
LinuxCommand入門2
silmin_
0
310
Webについて
silmin_
3
230
ネットワークとは
silmin_
0
290
コンピュータとは|初心者向け資料
silmin_
1
240
ビットについて|入門者向け資料
silmin_
0
250
Other Decks in Technology
See All in Technology
Harness Engineering on Rails
joelq
0
670
10年欲しかった音楽管理アプリを、AIと一緒に作りはじめた
judau
1
150
Oracle Cloud Infrastructure(OCI):Onboarding Session(はじめてのOCI/Oracle Supportご利⽤ガイド)
oracle4engineer
PRO
3
21k
地方移住と都心キャリアの両立は「金・時間・人」のリソースをフル活用すれば実現できる!〜Snowflake女子会 vol.8
snowwmn0824
0
130
C#コードの結合を可視化する Roslyn解析による設計改善と リファクタリング判断
dora56
0
860
AWS DevOps Agent スキルをつかいこなそう / Master AWS DevOps Agent Skills
kinunori
2
570
なぜ「決定性」が 決定的に重要なのか? Durable Execution 基盤の数理的理解 #serverlessjp / ServerlessDays Tokyo 2026
ytaka23
4
1.3k
行動するAIのためのオントロジー | DevRev — Encraft #26.pdf
dvrv_tknrszk
1
490
Coil3を内部実装から読み解く~キャッシュ戦略とAVIF画像の描画〜/nikkei-tech-talk50
nikkei_engineer_recruiting
0
110
エージェントはローカル、検証はMicroVM — Lambda MicroVMsでつくるServerless CI
fujioka6789
3
830
LT:「このままでいいのかな?」から一歩踏み出した私のデータキャリア選択〜社会人3年目に上京を決意したリアル〜Snowflake女子会 vol.8
snowwmn0824
0
110
Azure Copilot Resiliency Agentをいろいろ試してみる
tomokusaba
0
120
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
55
8.3k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
390
Automating Front-end Workflow
addyosmani
1369
210k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
250
Done Done
chrislema
187
17k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Mind Mapping
helmedeiros
1
370
The Mindset for Success: Future Career Progression
greggifford
PRO
0
520
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
510
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
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