Gitの使い方まとめ
git rm --cached (ファイルパス)
指定したファイルがステージングエリアから削除され、Gitの追跡対象から外れます。
この操作をコミットしてリモートリポジトリにプッシュすると、そのファイルはリモートリポジトリからも削除される。
git reset (ファイルパス)
ステージングエリアからファイルを削除するが、Gitの追跡対象から除外しないようにするには、git resetコマンドを使用します。これにより、ファイルの変更をステージングエリアから取り除きますが、ファイル自体は引き続き追跡されます。
git update-index --assume-unchanged (ファイルパス)
指定したファイルの監視を無視する
git update-index --no-assume-unchanged (ファイルパス)
指定したファイルの監視無視を解除する
git ls-files -v | grep '^h'
監視を無視するファイル(assume-unchangedフラグが設定されているファイル)を確認する
git log --oneline -n (数字)
ログをワンラインでn件表示する
git log --oneline -n (数字) (ファイルパス)
特定のファイルのログをワンラインでn件表示する
git show --name-status ハッシュID
指定コミットで追加/変更/削除したファイルのファイル名を表示
git cherry-pick ハッシュID
指定したコミットのみ取り込む。
git cherry-pick ハッシュID ハッシュID
にょうに複数のコミットを一度に指定可
git reset --hard HEAD
commitした直後の状態に戻す。「ワーキングツリー」「ステージング」を元の状態に戻す。
ただしUntrackedは対象外。Untrackedファイルを含めてcommit直後の状態に戻したい場合は、先にgit add.
してから上記コマンドを実行する
git reset --mixed HEAD
「ステージングだけ」commitした直後の状態に戻す。
git reset --hard HEAD^
直前のcommitを取り消し。この時、「ワーキングツリー」「ステージング」も削除される。
^ や ~ をつけることで直前のコミットを表すことができる : HEAD^ 、 HEAD~
git reset --soft HEAD^
直前のコミットを取り消すが、「ワーキングツリー」「ステージング」から削除しない。
git reset --hard ORIG_HEAD
git resetをなかったことにする
git checkout HEAD -- (ファイルパス)
特定のファイルだけcommitした直後の状態に戻す。
ファイルパスの前と--の間は空白。
git restore
git restore --source (コミットID) -- (ファイルパス)
特定のファイルだけ、特定のコミットIDの状態に戻す。
ファイルパスの前と--の間は空白。
git merge (ブランチ名)
別ブランチのコミットをマージする
削除
git branch -d (ローカルブランチ名)
ローカルのブランチを削除
git push origin --delete (リモートブランチ名)
リモートのブランチを削除
git branch | grep '^ (キーワード)' | xargs git branch -D
キーワードに前方一致するブランチを一括削除
例:git branch | grep '^ local/' | xargs git branch -D
git status
コマンド
Your branch is ahead of 'origin/xxxxx' by n commits.
リモートリポジトリに反映していない、ローカルのリポジトリの変更がn個あるよ。
コミット履歴を書き換える
git rebase -i (コミットID)^
指定したコミットIDより前のコミットが履歴としてエディタに表示されるので、リベースしたいコミットの行だけを削除し保存することで当該コミットが無かったことになる。
残したい場合はpick (コミットハッシュ) (コミットメッセージ)
とする。
削除したい場合は、pick (コミットハッシュ) (コミットメッセージ)
を削除するか、drop (コミットハッシュ) (コミットメッセージ)
に書き換える。
なお、当該コミットが既にリモートブランチにpush済みの場合、コミット削除を反映させるにはgit push -f
が必要。-fは強制の意味。
スタッシュ
git stash
commit前の変更をスタッシュに退避する
git stash save "任意のメッセージ"
commit前の変更をステージングも一緒に退避
git stash list
スタッシュに退避した変更を一覧で確認する
stash@{0}: WIP on test: xxxx
stash@{1}: WIP on commit-sample: xxxx
git stash apply stash@{0}
スタッシュに退避した変更をブランチに反映する(スタッシュには残る)
git stash pop stash@{0}
スタッシュに退避した変更をブランチに反映にし、スタッシュからも削除する。
git stash drop stash@{0}
スタッシュに退避した変更をスタッシュから削除する
git stash clear
スタッシュを全て削除
ブランチの名前を変えてリモートブランチと紐づける
変更前のブランチにいる状態で行う
git branch -m (元のブランチ名) (新しいブランチ名)
git push --set-upstream origin (紐づけたいリモートブランチ)
マージ
マージした際に表示される以下メッセージは、正常終了を意味する。
Merge made by the 'ort' strategy.
'ort' strategy は、Git 2.34以降でデフォルトになった新しいマージアルゴリズム("Optimized Recursive"の略)。「マージが 'ort' 戦略で正常に完了した」ことを示すだけのメッセージ
差分取得
git diff --name-status (コミットハッシュ1) (コミットハッシュ1)
コミット履歴(log)
git log --oneline -n (件数)
git log --oneline -n 10
とすれば、コミットメッセージを直近10件まで表示
git log --no-merges
マージコミットを除外して履歴を表示
git log --oneline --no-merges --first-parent
マージコミットとマージで混入した他ブランチのコミットを除外して履歴を表示
Discussion