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
About Git/Github
Search
YushiroDodo63
April 21, 2022
Technology
0
110
About Git/Github
This slide is description of Git and Github for our development team.
YushiroDodo63
April 21, 2022
Tweet
Share
Other Decks in Technology
See All in Technology
My Generation 年配者がこの先生きのこるには/My Generation How elder engineers can survive
kwappa
3
5.1k
【shownet.conf_】放送局とShowNetが共創する、未来の放送システム ~Media over IP 特別企画の裏側~
shownet
PRO
0
250
山手線一周のパフォーマンス改善
suzukahr
0
110
DenoでもViteしたい!インポートパスのエイリアスを指定してラクラクアプリ開発
bengo4com
0
1.7k
可視化がやりたくてMIERUNEに転職した話 〜“思考のための道具”とコンピューターによる新たな表現〜 / MIERUNE JCT - Tokyo 2024
sorami
2
460
10Xでのデータ基盤の変遷とこれから: データマネジメントのリアル 〜BtoB企業3社の歩みとこれから〜
10xinc
6
1.2k
クロージング / MIERUNE JCT - Tokyo 2024
mierune
PRO
0
290
【ログ分析勉強会】EDR ログで内部不正を検出できるのか、Copilot に聞いてみた
hssh2_bin
2
260
GitHub Actions/Docker/Terraform/Renovate で最小限の Monorepo CD パイプラインを作る / Minimalistic Monorepo CD Pipeline with GitHub Actions, Docker, Terraform and Renovate
yuyatakeyama
4
340
AWSへのNIST SP800-171管理策 導入に向けての整備/20240930 Mitsutoshi Matsuo
shift_evolve
0
140
OPENLOGI Company Profile
hr01
0
53k
Efficient zero-copy networking using io_uring
ennael
PRO
0
260
Featured
See All Featured
The Brand Is Dead. Long Live the Brand.
mthomps
53
38k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
91
16k
Six Lessons from altMBA
skipperchong
26
3.4k
YesSQL, Process and Tooling at Scale
rocio
167
14k
Making Projects Easy
brettharned
114
5.8k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
WebSockets: Embracing the real-time Web
robhawkes
59
7.3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
26
1.9k
Documentation Writing (for coders)
carmenintech
65
4.3k
Optimizing for Happiness
mojombo
375
69k
How to Ace a Technical Interview
jacobian
275
23k
Transcript
NUTMEG Git Yushiro Dodo
はじめに 1 技大祭実行委員 情報局 0
「Git」とは ファイルのバージョン管理ツール で す はじめに
バージョン管 理ツール データを保存するだけでなく、 誰が、いつ、どこを 編集したか。 その履歴も保存管理するツール
バージョン管 理ツール
バージョン管 理ツール
バージョン管 理ツール データを保存するだけでなく、 誰が、いつ、どこを 編集したか。 その履歴も保存管理するツール
Git できること 02 技大祭実行委員 情報局
Git 特徴 1. ファイルのバージョン管理 2. 上書きされたりすることなく、 一つのファイルを複数人で編集
Git できること • 個人の作業場所と共有の作業場所 がある。 • 作業内容の保存と共有ができる ざっくり説明 共有の作業場所 自分の作業場所
別の人の作業場所
Git できること • 個人の作業場所と共有の作業場所 がある。 • 作業内容の保存と共有ができる ざっくり説明 共有の作業場所 自分の作業場所
別の人の作業場所
Git 用語説明 直訳すると「貯蔵庫」 データを保管する場所のこと。 リモートリポジトリ ローカルリポジトリ の2種類がある リポジトリ
Git 用語説明 サーバ上に置かれるリポジトリ 1つしか存在せず、 みんなで共有できる。 一番大事で、 メインとなるリポジトリ リモートリポジトリ
Git 用語説明 個人個人のPC上に作られる リポジトリ 開発メンバーの数だけできる。 ローカルリポジトリ
Git できること • 個人の作業場所と共有の作業場所 がある。 • 作業内容の保存と共有ができる ざっくり説明 リモートリポジトリ ローカルリポジトリ
ローカルリポジトリ
Git できること ”fuga”というファイルの 4~6行目を編集 作業内容の保存 - hoge |- fuga(update) ローカルリポジトリ
リモートリポジトリ - hoge |- fuga 1 =========== 2 =========== 3 =========== 4 =========== 5 =========== 6 =========== 7 =========== 8 =========== 9 =========== 10 =========== 11 =========== 12 ===========
Git できること このファイルを リモートリポジトリに共有 作業内容の保存 - hoge |- fuga(update) ローカルリポジトリ
リモートリポジトリ - hoge |- fuga 1 =========== 2 =========== 3 =========== 4 =========== 5 =========== 6 =========== 7 =========== 8 =========== 9 =========== 10 =========== 11 =========== 12 ===========
Git できること このファイルを リモートリポジトリに共有 作業内容の保存 - hoge |- fuga(update) ローカルリポジトリ
リモートリポジトリ - hoge |-fuga(update) 1 =========== 2 =========== 3 =========== 4 =========== 5 =========== 6 =========== 7 =========== 8 =========== 9 =========== 10 =========== 11 =========== 12 ===========
Git できること 共有されたファイルは 他の人も持ってこれる 作業内容の共有 - hoge |- fuga(update) ローカルリポジトリ
リモートリポジトリ - hoge |-fuga(update) 1 =========== 2 =========== 3 =========== 4 =========== 5 =========== 6 =========== 7 =========== 8 =========== 9 =========== 10 =========== 11 =========== 12 ===========
Git できること 共有されたファイルは 他の人も持ってこれる 作業内容の共有 - hoge |- fuga(update) ローカルリポジトリ
リモートリポジトリ - hoge |-fuga(update) 1 =========== 2 =========== 3 =========== 4 =========== 5 =========== 6 =========== 7 =========== 8 =========== 9 =========== 10 =========== 11 =========== 12 =========== このおかげで チーム開発が非常にやりやすい
Git 基本用語 03 技大祭実行委員 情報局
Git 用語説明 作業の履歴を枝分かれさせて 記録するもの ブランチ
Git 用語説明 ブランチを結合すること マージ
Git 使い方 04 技大祭実行委員 情報局
基本の使い方 Gitには大きく分けて 左の4つの状態がある Gitの状態 ワークツリー Work Tree インデックス ( ステージ
) Index ( Stage ) ローカルリポジトリ Local Repository リモートリポジトリ Remote Repository
gitコマンドを料理に例えてイメージしてみる ハンバーグを作るとしましょう
基本の使い方 開発のための準備 -クローン- Work Tree Index(Stage) Local Remote リモートリポジトリからクローンし 自分のローカル環境に複製する。
開発を始めるときに最初に 実行するコマンド command: git clone <URL> ex: git clone
[email protected]
:NUTFes/FinanSu.git
基本の使い方 開発のための準備 -クローン- 材料を買ってくる 道具を用意する
基本の使い方 開発のための準備 -プル- リモートリポジトリからプルして 自分のローカル環境に反映する。 データのダウンロードのようなもの。 command: git pull origin
<ブランチ名> ex: git pull origin develop Work Tree Index(Stage) Local Remote
基本の使い方 開発のための準備 -プル- 材料を冷蔵庫から出す 道具を用意する
基本の使い方 開発のための準備 -ブランチを切る- 開発のためにブランチを切る 開発内容に沿ったブランチ名にする command: git checkout -b <branch
name> ex: git checkout -b feature/issue1 or command: git switch -c <branch name> ex: git switch -c feature/issue1
基本の使い方 開発のための準備 -ブランチを切る- メインキッチンのブランチから、 玉ねぎブランチ 肉をこねるブランチ 焼くブランチ ソースブランチ に分ける メイン
キッチン 玉ねぎ 肉 こねる 焼く ソース
基本の使い方 編集中のファイルは Work Tree にある Work Tree Work Tree Index(Stage)
Local Remote
基本の使い方 玉ねぎ担当: 玉ねぎを切ったり炒めたりしてる Work Tree Work Tree Index(Stage) Local Remote
基本の使い方 編集が終わって保存したいファイルを Index(Stage)に登録 ステージング Work Tree Index(Stage) Local Remote command:
git add <ファイル名> ex: git add hoge.txt
基本の使い方 ステージング Work Tree Index(Stage) Local Remote 玉ねぎ担当: 玉ねぎ切って炒めた。 いつでも肉と混ぜれます。
基本の使い方 ステージングされたファイルを ローカルリポジトリに登録 ゲームで言うセーブにあたる コミット Work Tree Index(Stage) Local Remote
command: git commit -m “<commit message>" ex: git commit -m “hoge.txtの修正” Save
基本の使い方 コミット Work Tree Index(Stage) Local Remote 玉ねぎ担当: 玉ねぎを皿に置いといて、 いつでも肉と混ぜれるようにした
準備万端の状態 Save
基本の使い方 ローカルリポジトリの編集を リモートリポジトリに反映する プッシュ Work Tree Index(Stage) Local Remote command:
git push origin <branch name> ex: git push origin main
基本の使い方 準備万端の玉ねぎをキッチンに納める プッシュ Work Tree Index(Stage) Local Remote
基本の使い方 準備万端の玉ねぎをキッチンに納める プッシュ Work Tree Index(Stage) Local Remote 基本的にはこれらのコマンドを使って 開発を進めていく
Git 初級編 05 技大祭実行委員 情報局
基本の使い方 ファイルの編集をもとに戻したいとき 編集の取り消し Work Tree Index(Stage) Local Remote # 元々あったファイル
command: git restore <ファイル名> ex: git restore hoge.txt ex: git restore . # 全て元に戻す # 新しく作成したファイル command: git clean <option> ex: git clean -f # ファイル ex: git clean -df # ディレクトリ
基本の使い方 git add でステージングしたファイルを もとに戻したいとき ステージングの取り消し Work Tree Index(Stage) Local
Remote command: git reset HEAD <ファイル名> ex: git reset HEAD hoge.txt
基本の使い方 git add でステージングしたファイルを 全部もとに戻したいとき ステージングの取り消し Work Tree Index(Stage) Local
Remote command: git reset HEAD
基本の使い方 直前のコミットを取り消して indexに戻す コミットの取り消し Work Tree Index(Stage) Local Remote command:
git reset --soft HEAD^ Save
基本の使い方 直前のコミットを取り消して 1つ前のコミットを作成した直後に戻る ※ インデックス・ワークツリーの変更も元に 戻るため注意が必要 コミットの取り消し Work Tree Index(Stage)
Local Remote command: git reset --hard HEAD^ Save
基本の使い方 直前のコミットを取り消す 新しいコミットを作成。 既にPush済みで削除したくない コミットがある際に用いる場合がある コミットの取り消し Work Tree Index(Stage) Local
Remote command: git revert <commit id> Save
基本の使い方 直前のコミットを修正するコマンド コメントを追加したときなど、 軽い変更の場合に用いる。 コミットの修正 Work Tree Index(Stage) Local Remote
command: git commit --amend -m “commit msg” ex: git commit --amend -m “hoge.txtの修正” Resave
Git 中級編 06 技大祭実行委員 情報局
これまで当たり前に使ってたコマンドを ちょっと見直してみよう
[git checkout] 編
Gitコマンド 見直し git checkout 変更を元に戻すコマンド git checkout <filename> git checkout
. ブランチを変更するコマンド git checkout <branchname> git checkout -b <branchname>
Gitコマンド 見直し git checkout 変更を元に戻すコマンド git checkout <filename> git checkout
. ブランチを変更するコマンド git checkout <branchname> git checkout -b <branchname> 1つのコマンドで別々の処理ができる → わかりにくい!
Gitコマンド 見直し git checkout 変更を元に戻すコマンド git restore <filename> git restore
. ブランチを変更するコマンド git switch <branchname> git switch -c <branchname>
Gitコマンド 見直し 変更を元に戻すコマンド コマンドでもrestoreを推奨 git restore <filename> git restore .
[git commit] 編
コミット どのタイミングでコミットしてる? • issueが完全に終わった時? • 作業が一段落ついた時? • ファイルに変更を加えた時? コミット Work
Tree Index(Stage) Local Remote Save
コミット 一概にこれが正解!とは言えないが 基準として考えられることは • エラーがなく動く単位 • タスクの粒度によっては、 1issue1commit • 戻したい単位
(ゲームのセーブと同じ単位) • renameやファイル移動 • タスクに関係がない修正 Work Tree Index(Stage) Local Remote Save
[git pull] 編
Gitのリポジトリは、 - リモートリポジトリ - ローカルリポジトリ の2つに分かれている。 Gitコマンド 見直し Local repository
Remote repository
リモートリポジトリは - リモートブランチ ローカルリポジトリは - トラッキングブランチ - ローカルブランチ の3つのブランチがある。 Gitコマンド
見直し Local repository Remote repository リモートブランチ トラッキングブランチ ローカルブランチ
リモートリポジトリ上の ブランチの状態を指すもの git branch -r で確認可能 Gitコマンド 見直し Local repository
Remote repository リモートブランチ トラッキングブランチ ローカルブランチ リモートブランチ
リモートブランチの内容を 追跡(トラッキング)するブランチ git branch -a で確認可能 Gitコマンド 見直し Local repository
Remote repository リモートブランチ トラッキングブランチ ローカルブランチ トラッキングブランチ
ローカルリポジトリにあるブランチ git branch で確認可能 Gitコマンド 見直し Local repository Remote repository
リモートブランチ トラッキングブランチ ローカルブランチ ローカルブランチ
リモートブランチから トラッキングブランチに 最新情報を持ってくるコマンド Gitコマンド 見直し Local Remote リモートブランチ トラッキングブランチ ローカルブランチ
git fetch command: git fetch origin // <origin>は省略可 // 特定のブランチのみfetch command: git fetch origin master origin/master remotes/origin/master master
トラッキングブランチから ローカルブランチに 最新情報を持ってくるコマンド Gitコマンド 見直し git merge // マージする先のブランチでコマンドを実行 command:
git merge <マージ元のブランチ> // in master branch ex: git merge remotes/origin/master ex: git merge origin/master Local Remote リモートブランチ トラッキングブランチ ローカルブランチ master remotes/origin/master origin/master
リモートブランチから トラッキングブランチを介して、 ローカルブランチに 最新情報を持ってくるコマンド Gitコマンド 見直し git pull command: git
pull origin <branch name> ex: git pull origin master Local Remote リモートブランチ トラッキングブランチ ローカルブランチ master remotes/origin/master origin/master
“git pull”の後の “origin” って何か =リポジトリのURLの別名 (あだ名) Gitコマンド 見直し ちょっと脱線 Local
Remote リモートブランチ トラッキングブランチ ローカルブランチ master remotes/origin/master origin/master
“origin” はあだ名なので、 もちろんさっき確認したURLを使って プルしてくることも可能 Gitコマンド 見直し ちょっと脱線 Local Remote リモートブランチ
トラッキングブランチ ローカルブランチ master remotes/origin/master origin/master
Gitコマンド 見直し Local repository Remote repository リモートブランチ トラッキングブランチ ローカルブランチ fetch
merge pull pullは、リモートブランチから ローカルブランチに fetch + merge は、 リモートブランチから トラッキングブランチを介して、 ローカルブランチに
Gitコマンド 見直し Local repository Remote repository リモートブランチ トラッキングブランチ ローカルブランチ fetch
merge pull pullは、リモートブランチから ローカルブランチに fetch + merge は、 リモートブランチから トラッキングブランチを介して、 ローカルブランチに やっとること一緒やんけ! じゃあpullで良くない??
Gitコマンド 見直し Local repository Remote repository リモートブランチ トラッキングブランチ ローカルブランチ fetch
merge pull pullは、リモートブランチから ローカルブランチに直接マージする = コンフリクトが起こりやすい
Gitコマンド 見直し Local repository Remote repository リモートブランチ トラッキングブランチ ローカルブランチ fetch
merge pull fetch + merge は • リモートの内容をローカルに 反映する前に差分を確認したい = コンフリクトを防ぐため • pullするブランチ先をよく間違える 場合に用いると良い
プルリクエスト 編
push後、別ブランチにマージする前に 動作確認などをしてもらうためのGithub の機能 Git 中級編 プルリクエスト(プルリク) とは プルリクエスト
手順 1. 確認用のブランチを作成 git switch -c review/issue1 2. プルリクが出されているブランチ からプルしてくる
git pull origin feature/issue1 3. 修正点があったら修正して、 add, commit, pushする git push origin review/issue1:feature/issue1 4. 動作確認し問題ないならマージする Git 中級編 プルリクエスト(プルリク) の確認方法 (ローカルで何も作業してない時)
手順 1. プルリク確認用ディレクトリを作成 mkdir review_dir 2. git cloneする git clone
<repository URL> 3. プルリクが出ているブランチに移動 git switch feature/issue1 4. 修正点があったら修正して、 add, commit, pushする git push origin feature/issue1 5. 動作確認し問題ないならマージする Git 中級編 プルリクエスト(プルリク) の確認方法 (ローカルで作業中の時)
コンフリクト 編
複数人が同じ箇所を編集したときに、 どっちの編集を優先していいか わからない状態。 Git 中級編 リモートリポジトリ hoge.txtの3行目を編集 hoge.txtの3行目を編集 コンフリクト コンフリクト
Aさん Bさん
これがコンフリクトが起こってる状態 Git 中級編 コンフリクト
- Github上で解消 (簡単なコンフリクトならGithubで 解消可能) - コードを編集して解消 (複雑なコンフリクトの場合は、 実際にコードを編集して解消する) Git 中級編
リモートリポジトリ hoge.txtの3行目を編集 hoge.txtの3行目を編集 コンフリクト コンフリクトの解消方法 Aさん Bさん
1. Resolve conflictsボタンをクリック 2. ファイルを修正 3. Mark as Resolvedボタンを クリック
4. Commit mergeボタンをクリック Git 中級編 リモートリポジトリ hoge.txtの3行目を編集 hoge.txtの3行目を編集 コンフリクト Github上で解消 Aさん Bさん
Git 中級編 Github上で解消 [Resolve conflicts]をクリック
Git 中級編 Github上で解消 画面右側のテキストエリアを編集
Git 中級編 Github上で解消 編集後、右側のボタン [Mark as resolved]をクリック
Git 中級編 Github上で解消 コンフリクトが解消されたので、 [Commit merge]ボタンをクリック
Git 中級編 Github上で解消 コンフリクトが解消され、 マージ可能になった
1. コンフリクト解消用ブランチを作成 2. マージ先のブランチからプルする 3. ファイルを編集 4. add, commit, push
5. プルリクを書いてマージする Git 中級編 リモートリポジトリ hoge.txtの3行目を編集 hoge.txtの3行目を編集 コンフリクト コードを編集して解消 Aさん Bさん
Git 中級編 コードを編集して解消 コンフリクト解消用のブランチを作成 command: git switch -c <branch name>
ex: git switch -c fix/conflict リモートリポジトリ hoge.txtの3行目を編集 hoge.txtの3行目を編集 コンフリクト Aさん Bさん
Git 中級編 コードを編集して解消 マージ先のブランチからプル feature/conflict-4 ブランチから master ブランチにマージするときに コンフリクトが発生 =
masterブランチからプル command: git pull origin <branch name> ex: git pull origin master 作業ブランチ (feature/conflict-4) コンフリクト解消ブランチ (fix/conflict-2) コンフリクト マージ先ブランチ (master) push pull
Git 中級編 コードを編集して解消 VSCodeでファイルを開くと 以下のように表示される
Git 中級編 コードを編集して解消 上部(HEAD(Current Change))の 変更をマージする場合
Git 中級編 コードを編集して解消 上部(HEAD(Current Change))の 変更をマージする場合
Git 中級編 コードを編集して解消 下部(Incoming Change)の 変更をマージする場合
Git 中級編 コードを編集して解消 下部(Incoming Change)の 変更をマージする場合
Git 中級編 コードを編集して解消 両方の変更をマージする場合
Git 中級編 コードを編集して解消 両方の変更をマージする場合
Git 中級編 コードを編集して解消 手動で不要な部分を削除してもOK
Git 中級編 コードを編集して解消 編集が終了したら、 add, commit, push を行う
Git 中級編 コードを編集して解消 編集が終了したら、 add, commit, push を行う
Git 中級編 コードを編集して解消 プルリクを作成。 先程のconflict解消のコミットが 反映されている
Git 中級編 コードを編集して解消 マージ可能になっている
Git まとめ 07 技大祭実行委員 情報局
• コミットの粒度やいつも使ってるコマンドを ちょっとだけ意識しよう! • Gitは使えば使うほど慣れていくので 使い倒しましょう!