Git
Gitはよく使うが、限られたコマンドしか使わないイメージ。
コマンド
| コマンド | 説明 |
|---|---|
| git clone <ファイル名(以下同様)> | リモートリポジトリをローカルにコピー |
| git add <> | ステージにファイルの変更を伝える |
| git commit | リポジトリにファイルの変更を記録する |
| git status | 変更されたファイルの確認 ・ワークツリーとステージ間の差異 ・ステージとリポジトリ間の差異 |
| git diff (--staged)<> | ・ワークツリーとステージ間の変更差分の確認 ・--stagedを付けるとステージとリポジトリ間の変更差分の確認 ・git statusよりも詳細な変更内容を確認したい時に使用する |
| git log <> | 変更履歴を確認 |
| git rm (-r)<> | ・ファイル又はディレクトリを削除 ・git rmでリポジトリとワークツリーの両方からファイルを削除する、リポジトリのみの削除は--cachedを付ける |
| git mv <旧ファイル><新ファイル> | ファイルの移動をステージに記録する |
| git remote add <リモート名> |
・リポートリポジトリを新規追加する |
| git push(-u)<リモート名> <ブランチ名> | ・リモートリポジトリへ送信する ・-uをつけてプッシュすると次回以降はgit pushのみで足りる |
| git config --global alias.ci commit | ciでコミットできるようになる(他設定同様) |
| git checkout -- <> | ファイル(ディレクトリ)への変更を取り消す |
| git reset (--soft)HEAD^ | ・--softで直前のコミットが巻き戻る ・--mixedで直前のステージが巻き戻る ・--hardで直前の全てが巻き戻る |
| git commit --amend | ・直前のコミットを修正する ・リモートリポジトリにpushした後の修正には適用不可 ・ファイルを修正してgit addしてから本コマンドを実行する |
| git remote (-v) | リモートを表示する(-vでURLを表示) |
| git fetch <><> | リモートから情報を取得する |
| git pull <><> | リモートから情報を取得する+ワークツリーに反映 |
| git remote show <リモート名> | リモートの詳細情報を表示 |
| git remote rename <旧リモート名> <新リモート名> | リモートを変更 |
| git remote rm <> | リモートを削除 |
| git branch <> | ・ブランチの作成 ・-aオプションでリモートブランチも表示 |
| git checkout <> | ・ブランチを切り替える ・-bオプションでブランチを新規作成し切り替える |
| git merge <リモート名/ブランチ名> | 変更履歴をマージする |
| git branch -m <ブランチ名> | ブランチ名を変更 |
| git branch -d <> | ・ブランチを削除 ・-Dオプションで強制削除 |
| git rebase <ブランチ> | コミットの履歴を一直線にする(綺麗にする) |
| git pull --rebase <> <> | マージコミットが残らないからGithubの内容を取得したいだけ(最新のコミットのみ取得したいだけ)の時は便利 |
| git rebase -i <コミットID> | ・複数のコミットをやり直す ・修正したいコミットをeditにする ・git commit --amendで修正 ・git rebase --continueで次のコミットへいく ※コミットを削除したい、順番を入れ替えたい時にも使用できる |
| git rebase -i HEAD~3 | ・コミットを一つにまとめる ・pickをsquashに変更するとそのコミットを直前のコミットと一つにする |
| 同上 | ・コミットを分割する ・pickをeditに変更し、git reset HEAD^し、分割単位で各々コミットする |
| git tag | タグの一覧表示 |
| git tag -a [タグ名] -m "メッセージ" | 詳細タグの作成 |
| git tag [タグ名](コミット名)] | ・軽量タグの作成 ・(コミット名)を付けると過去のコミットにタグを付けられる(詳細タグについても同様) |
| git show [タグ名] | タグのデータを表示 |
| git push [リモート名] [タグ名]・ | タグをリモートリポジトリに送信※単純なpushではタグは送信されない タグ名のところを--tagsオプションにすると一斉送信 |
| git stash | ・作業を一時避難する ・ワークツリーとステージ上の変更を一時避難し他のブランチで作業可能とする |
| git stash list | 避難した作業を確認する |
| git stash apply (--index) | ・避難した最新の作業を復元する ・--indexオプションでステージの状況も復元する |
| git stash drop | ・避難した最新の作業を削除する ・clearを付けると全削除する |
用語
| 用語 | 説明 |
|---|---|
| gitの保存方法 | スナップショット(その時点の状態を、そのまま丸ごと保存したもの)で記録する |
| ローカルでの開発の流れ | ワークツリー(ファイル変更の作業場)→ステージ(ファイル変更の準備)→リポジトリ(スナップショットを記録) |
| コミット | スナップショットを記録すること |
| ステージが存在する理由 | 変更した内、記録したい変更分だけ切り分けるためにある |
| gitの本質 | ・リポジトリに「圧縮ファイル」、「ツリー(インデックスのファイル構成を保存)」、「コミット(ツリーや親コミット等の情報を保存)」ファイルを作成することでデータを保存 ・つまりデータを圧縮してスナップショットで保存している |
| インデックス | ・ファイル名と圧縮ファイルの内容をマッピング ・ツリーファイルを直接作成すると記録しない変更があるだけ無駄なツリーファイルが作成されるのを防ぐためインデックスに一つのファイルとしてまとめる |
| gitオブジェクト | 圧縮ファイル、ツリーファイル、コミットファイルのこと |
| ツリーファイル | ツリーファイルは構造や名前を持たない圧縮ファイルに構造(ファイル名とファイル内容)を与え、圧縮ファイルとツリーファイルを保存している |
| gitコマンド | 結局、圧縮ファイル、ツリーファイル、コミットファイルのいずれかのgitオブジェクトに対する操作となることを意識する |
| エイリアス | 別名のこと |
| .gitignoreファイル | 管理しないファイルをGitの管理から外す |
| git pullについて | 今作業中のブランチにpullが反映される点に注意 |
| ブランチとは | 最新のコミットを指したポインタ |
| HEADとは | 作業中のブランチを指したポインタ |
| マージとは | ・変更内容を取り込むこと ・マージには3種類ある |
| Fast Foward | ポインタを先に進めるマージ |
| Auto Merge | 基本的なマージでマージコミットという新しいコミットを作る(親を二つ持っている点が特徴) |
| コンフリクトとは | 同じファイルの同じ行に対して異なる編集を行った時起きる |
| コンフリクトの解決の仕方 | ・ファイルの内容を書き換え、<<, == , >>を削除する ・git statusで確認 |
| リモートブランチは | <リポジトリ>/<ブランチ>で参照できる |
| pullrequestの流れ | 1. githubにpushしたらpullrequestを作成 2. メンバーにコードレビューを依頼 3. github上でmerge 4. ブランチを削除 |
| github flowとは | ・github社のワークフロー ・シンプルな開発フロー |
| rebaseとは | mergeとは別の変更統合方法で履歴を綺麗にする |
| リベースとマージの違い | 履歴が一直線(リベース)か枝分かれ(マージ)か |
| リベースのNG | GithubにプッシュしたコミットをリベースするのはNG |
| リベースとマージのどちらを使うか | ・作業の履歴を残したいならマージ、綺麗にしたいならリベース ・基本マージを使う |
| タグとは | コミットを参照しやすくするために付ける名前のこと |
参考文献
- 山浦 清透, 2023, 「Git: もう怖くないGit!チーム開発で必要なGitを完全マスター」, udemy, (2023/8/10取得,https://www.udemy.com/).
- いちばんやさしいGit&GitHubの教本 第2版