記事のタイトル
目次
■個人開発時のフロー
git init
効果:リポジトリを初期化し追跡下に置かれ、バージョン管理が可能になる。
メモ:開発の時は最初にこのコマンドを入力する
git init
git add
効果:ファイル変更をステージングエリアに上げる。
# 特定のファイル
git add <ファイル名>
# 全ファイル
git add .
git diff
効果:現在の作業ディレクトリとステージングエリアとの間の差分を表示。
メモ:既存のファイルに対する変更点(追加、削除、修正)のみを表示。新規ファイルは含まない。
# 作業ディレクトリ ~ git addの差分
git diff
# git add ~ git commit後の差分
git diff HEAD
# git add ~ git commit前の差分
git diff --staged
git commit
効果:選択したファイルを記録
# 別エディタで記録
git commit
# 直接入力 ※使用頻度多い
git commit -m "Initial commit"
# コミットする際に変更内容を表示
git commit -v
git log
コミット履歴表示
# コミット履歴を表示※他メンバー含む
git log
# 1行表示
git log --oneline
# グラフィカルに表示
git log --graph
# 変更内容も表示
git log -p
# 入力した数だけ表示
git log -n <数>
# 1行表示 + 入力した数だけ表示 ⇨ シェルコマンドでエイリアス登録用
git l <数>
# 上記コマンドのエイリアス設定
git config --global alias.l '!bash -c "git log --oneline -n $1"'
#
!
の意味
コマンドの先頭に付けると外部コマンドとして実行できる
-c
の意味
連続コマンド入力
$1
の意味
https://atmarkit.itmedia.co.jp/ait/articles/1810/07/news001.html
git status
現在の変更内容確認
git status
git rimote
リモートリポジトリの設定を管理
# リモートの一覧表示
git remote
# リモートの詳細URL表示
git remote -v
# リモートリポジトリ登録・追加
git remote add <リモートリポジトリ名> <リモートリポジトリのURL>
git push
リモートリポジトリにファイルをアップロード
メモ:GitHubで自動生成され、以後は「git p
」でプッシュ可能になる
git push <リポジトリ名> main
■移動・削除・変更・短縮
git mv
留意点:名称変更した場合はgit commitする必要がある
git rmとgit addを同時に行うことになるため
# ファイル名orディレクトリ名変更
git mv <変更前> <変更後>
# ファイル移動
git mv <移動したいファイル> <移動先ディレクトリ>
git rm
# ファイル削除
git rm <ファイル名>
# ディレクリ削除
git rm <ディレクリ名>
# ディレクリと中の全てのファイルを削除
git rm -r <ディレクトリ名>
#ファイルをgitの追跡から解除をしてローカルに残したい場合
git rm --cached <ファイル名>
#ディレクトリと中の全てのファイルをgitの追跡から解除をしてローカルに残したい場合
git rm --cached -r <ディレクトリ名>
git reset (addステージングを取り消し)
コミットが 1以上
➡ ステージに追加した変更を元に戻す (git add
をキャンセル)
# ファイル
git reset HEAD <ファイル名>
# ディレクトリ
git reset HEAD <ディレクトリ名>
# 全て
git reset HEAD .
git commit -amend (直前のコミットを取り消し)
注意点:既にリモートでプッシュしたコミットは取り消ししない
他の開発者の履歴に影響を与えるため共有リポジトリでは特に注意が必要。
基本プッシュしたら使用しない事。
# ファイル
git commit --amend
Gitコマンドエイリアス(短縮)
# コマンドエイリアス登録
git config --global alias.短縮コマンド 元コマンド
# クオテーションで囲む方法
# 例)ログを1行で表示
git config --global alias.lg "log --oneline"
# 例)コミットを直接入力
git config --global alias.cm "commit -m"
# 登録された全てのコマンドエイリアスを表示
git config --global --get-regexp alias
# エイリアスを削除する
git config --global --unset alias.削除したいコマンド
※ --global
は Git のグローバル設定に適用されます。
※エイリアスを設定する際には git
を含める必要はありません。
たとえば、git status
の操作を短縮して s
としたい場合の入力例⇩
git config --global alias.s status
■チーム開発時のフロー
git clone
リモートリポジトリからローカルリポジトリにプロジェクトを複製。
他の人がすでに作成しているプロジェクトから始める場合に使用。
git clone <リポジトリのURL>
git fetch
リモートリポジトリからローカルリポジトリのブランチに情報を落とす
ローカルリポジトリに情報を落とすだけでワークツリーには反映しない
git fetch <リモート名>
git merge
# 変更を取り込む側のブランチに切り替える
git checkout master # masterブランチに切り替え
# 他のブランチから統合
git merge feature-branch # feature-branchの内容をmasterブランチにマージする
両方のブランチを統合して、新しく「マージコミット」を作成する
git pull
リモートリポジトリからファイルをダウンロードする。
git fetch
と git merge
を同時に行っている
git pull origin master
【手順①】git pull
で他メンバーが作成したファイルをダウンロード
【手順②】ファイルの中身変更
【手順③】git add
でステージング
【手順④】git push
でプッシュ
git branch
アスタリスク (*)
が付いているブランチは、現在チェックアウトして作業しているブランチ。コミットや変更がそのブランチに適用されます。
# 新しいブランチ作成
git branch <ブランチ名>
# 現在のリポジトリ内のブランチを一覧表示
git branch
# ブランチの全情報を表示
git branch -a
git checkout
主に二つの目的で使用されます
- ブランチの切り替え
- 変更の取り消し
# ブランチの切り替え
git checkout <切り替えたいブランチ名>
# 変更が取り消され、最後にコミットされた状態に戻ります
git checkout -- <ファイル名>
# ディレクトリごと
git checkout -- <ディレクトリ名>
# 全取り消し
git checkout -- .
# [--]をつける理由は、ブランチ変更と区別するため
# ブランチの作成とチェックアウトを同時に行う
git checkout -b <ブランチ名>
■変更の取り消し
②コミット後に再度編集※git checkoutの数を増やす
③git checkout -- <ファイル名>
を入力し最新のコミット時に戻す
ブランチの最初に戻りやり直す
# 全取り消し
git checkout .
# 未追跡ファイルを一括削除
git clean -fd
# 「01_feature」という1つ前のブランチに戻る
git checkout 01_feature
# 「02_feature」という現在作業していたブランチを削除する
git branch -D 02_feature
# やり直したい「02_feature」ブランチを作り直しチェックアウト
git checkout -b 02_feature
コミットを指定し作業環境を完全に戻す
# 1つ前のコミットにリセット
git reset --hard HEAD~
####### or ######
# 2つ前のコミットにリセット
git reset --hard HEAD~2
# 未追跡ファイルを一括削除
git clean -fd
注意)使用は控える
未追跡ファイルの削除
-f
は強制的にファイルを削除するオプションです。
-d
はディレクトリも含めて削除します。
-x
は.gitignoreで無視されているファイルも含めてすべて削除します。
git clean -fdx
開発やり直しのために未追跡ファイルを削除鶴つもりが
元から格納されていたアセットファイルまで削除されたので
使わないようにする。
先に記述したgit clean -fd
はいいが -x
は使わないようにする。
gitignoreファイルまで削除される
未追跡ファイルの削除の確認
git clean -nxd
リファレンスログから古いコミットへの参照を即時に期限切れにして削除します。
git reflog expire --expire=now --all
ガベージコレクションを強制的に実行して、削除されたコミットを含む不要なオブジェクトをクリーンアップ
git gc --prune=now --aggressive