Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Git入門
Search
Seiya
July 23, 2021
Technology
30
17k
Git入門
大学サークルのイントロ用資料です
Gitに入門します
resetやrevertも入れたらよかった気がしています
Seiya
July 23, 2021
Tweet
Share
More Decks by Seiya
See All by Seiya
おうちGitLabのススメ
silmin_
3
1.3k
暗号について
silmin_
0
150
LinuxCommand入門
silmin_
0
350
LinuxCommand入門2
silmin_
0
250
Webについて
silmin_
3
170
ネットワークとは
silmin_
0
220
コンピュータとは|初心者向け資料
silmin_
1
170
ビットについて|入門者向け資料
silmin_
0
200
GitLab-CIとGoogleCloudRunで作るSandBox環境
silmin_
2
250
Other Decks in Technology
See All in Technology
LLM-Readyなデータ基盤を高速に構築するためのアジャイルデータモデリングの実例
kashira
0
210
Overture Maps Foundationの3年を振り返る
moritoru
0
160
今からでも間に合う!速習Devin入門とその活用方法
ismk
1
510
最近のLinux普段づかいWaylandデスクトップ元年
penguin2716
1
670
AWS re:Invent 2025で見たGrafana最新機能の紹介
hamadakoji
0
130
Playwrightのソースコードに見る、自動テストを自動で書く技術
yusukeiwaki
13
5k
A Compass of Thought: Guiding the Future of Test Automation ( #jassttokai25 , #jassttokai )
teyamagu
PRO
1
250
AI駆動開発における設計思想 認知負荷を下げるフロントエンドアーキテクチャ/ 20251211 Teppei Hanai
shift_evolve
PRO
2
190
20251209_WAKECareer_生成AIを活用した設計・開発プロセス
syobochim
5
1.4k
乗りこなせAI駆動開発の波
eltociear
1
1k
AI時代におけるアジャイル開発について
polyscape_inc
0
130
因果AIへの招待
sshimizu2006
0
930
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
76
5.2k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Typedesign – Prime Four
hannesfritz
42
2.9k
Why Our Code Smells
bkeepers
PRO
340
57k
Embracing the Ebb and Flow
colly
88
4.9k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
Building Adaptive Systems
keathley
44
2.9k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Making Projects Easy
brettharned
120
6.5k
Become a Pro
speakerdeck
PRO
31
5.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
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