ソニックの部屋

主にプログラミングに関する記事を投稿します

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/).