😸

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