実際に使っている git のコマンドをまとめる
普段は Sourcetree で git を操作しています。
コマンドの勉強のために調べて実際に使ったコマンドはここにメモしていきます。
初期化
git init
作業前
リモートリポジトリの情報を取り込む
git fetch
リモートリポジトリの修正を取り込む
git pull
ブランチ
ローカルのブランチを確認
git branch
リモートブランチを確認
git branch -r
ローカルブランチを削除
git branch -d [ブランチ名]
リモートブランチを削除
git push --delete origin [ブランチ名]
ブランチを作成してチェックアウト
git checkout -b [ブランチ名]
作業後の流れ
修正を追加する
git add .
追加する修正を選択しながら追加する
git add -p
前回のコミットとの差分を確認する
git status
差分を確認する
git diff --cached
コミット
git commit -m "コミットメッセージ"
今いるブランチの変更をリモートリポジトリに反映
git push origin HEAD
マージしたいブランチに移動
git checkout [ブランチ名]
ブランチ同士を比較
git diff [ブランチ名] [ブランチ名]
ブランチをマージ
git merge [ブランチ名]
ブランチ同士の差分を比較し、ファイル名だけのリストを表示
git diff [ブランチ名] --name-only
一時的に特定のファイルの変更追跡を止める
一時的な不具合などで一部の処理を変更したがコミットはしたくないときに便利。
Docker でなぜかうまく動かない処理があったときに一部だけコメントアウトするために使った。
戻し忘れに注意。
git update-index --skip-worktree [ファイルパス]
変更追跡を止めていたファイルの追跡を戻す
git update-index --no-skip-worktree [ファイルパス]
追跡をスキップしていたファイルリストを表示
git ls-files -v .
でカレントディレクトリのファイルを列挙する。その際に接頭語に S
がついているものがスキップ対象なので、それだけを絞り込んで表示する。
他の接頭語もあるのでドキュメントを参照
git ls-files -v . | grep ^S
コミットログの検索
作業者で絞り込み
git log --committer=[ユーザー名]
コミットコメントを検索
git log --grep=[検索文字列]
# or
git log -S "キーワード" --oneline
コミットIDで情報を検索
git show [コミットID]
複数のリポジトリを一気に検索する
ざっくりこんな感じで動きました。
#!/bin/bash
logs_file="log.txt" # 結果の書き出し先ファイル
files="./work/*" # 検索したいリポジトリが入っているディレクトリ
grep_text="バグ" # 検索したい文字
for filepath in $files; do
cd $filepath
result=$(git log --oneline --decorate --graph --branches --tags --remotes --all --grep=$grep_text)
if [ -n "$result" ]; then
echo "${filepath} \n ${result} \n\n" >> $logs_file
fi
done
コンフリクトが起きたときの対応
Sourcetreeではぽちぽちやっているだけだったので改めて
メッセージはこんな感じ
CONFLICT (content): Merge conflict in [ファイル名]
Automatic merge failed; fix conflicts and then commit the result.
コンフリクトを解消する
エディターとかを使ってコンフリクトは解消させる.
VSCodeとかでいつもやってる
修正を追加してコミット
ここもいつもと変わらず.
コミットメッセージはいつも自動生成のやつでやっちゃってたけど書き直して書いちゃった方が良さそう
git add .
git commit -m 'コンフリクトを解消'
これだけ。簡単
コンフリクトが多すぎて解決しきれない時は
ブランチの状態が古い可能性があるので、一旦中止して状態を最新にしたりして試してみると良い
以下のコマンドでマージを中止できる
git merge --abort
一時的に変更を待避したいとき
スタッシュに変更を待避
git stash -u
メッセージと共にスタッシュに変更を待避
git stash save "メッセージ"
スタッシュのリストを表示
git stash list
↓こんな感じのが出る
stash@{0}: WIP on ブランチ名: 0cb8c8f Merge branch 'ブランチ名' into ブランチ名
stash@{1}: WIP on ブランチ名: 0cb8c8f Merge branch 'ブランチ名' into ブランチ名
スタッシュを反映
git stash apply stash@{0}
スタッシュを削除
git stash drop stash@{0}
スタッシュを反映しつつ削除
git stash pop stash@{0}
コミットコメント修正
1つ前のコミットコメントを直す
git commit -m '間違えたコミットメッセージ'
git commit --amend -m '正しいコミットメッセージ'
2つ目以降のやつはまだやったことないけどこれを参考
よく使うコマンドのエイリアス
zshのohmyzshでgitのプラグインがあるのでそのエイリアスのメモ
情報を更新
git fetch
のエイリアス
gf
ブランチをpull
git pull
のエイリアス
ggl
ブランチを切る
git checkout -b
のエイリアス
gcb [ブランチ名]
修正を追加
git add .
のエイリアス
ga .
ファイルの差分ステータス確認
git status -sb
のエイリアス( -sb
は表示をコンパクトにしてブランチ名を表示する )
gsb
差分を確認
git diff --cached
のエイリアス
gdca
メッセージ付きでコミット
git commit -m
のエイリアス
gcmsg "メッセージ"
修正をプッシュ
git push origin HEAD
のエイリアス
ggp
ブランチを移動
git checkout
のエイリアス
gco [ブランチ名]
ブランチの差分を確認
git diff
のエイリアス
gd [ブランチ名] [ブランチ名]
ブランチをマージ
git merge
のエイリアス
gm [ブランチ名]
ブランチの削除
git branch -d
のエイリアス
gbd [ブランチ名]
ステージングに追加した修正を取り消す
git reset
のエイリアス
grh
grhh # git reset --head
削除されたリモートブランチをローカルに反映
git fetch --all --prune
のエイリアス
gfa
削除されたリモートブンランチの状況をローカルに反映
削除自体は GitHub とかからでもOK
git fetch --prune
ブランチの変更を戻す
変更があったファイルを今のブランチの状態に戻す
git checkout .
これだけだと新規ファイルが消えないので以下のコマンドで消す
git clean -df
↓ もしかして ohmyzsh のプラグインで読み込んでいるエイリアスのこれが使える?(手付かずの状態に戻せるっぽい?)
gpristine # git reset --hard && git clean -dffx
マージを取り消す
プッシュする前ならこれでOK
git reset --hard <コミット番号>
ログを見やすくする
gl
で動くように .zshrc
に以下を書く
alias gl="git log --graph --all --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"