コミットログを一行表示で見たい
$ git log --oneline
ブランチをコミット順に表示したい
$ git for-each-ref refs/heads/ --sort='committerdate' --format='%(committerdate:short) %(refname:short)'
特定のブランチを削除したい
ローカル
$ git branch -D ブランチ名
リモート
$ git push --delete リモート名 ブランチ名
# または
$ git push リモート名 :ブランチ名
(リモートのブランチ削除はブラウザ操作の方が早いし確実だと思います)
特定のブランチ以外を削除したい
$ git branch | grep -v 消したくないブランチ | xargs git branch -D
例えば、developとmain以外を削除したい場合は、下記のようになる。
$ git branch | grep -v develop | grep -v main | xargs git branch -D
コミット履歴をきれいにしたい
$ git rebase -i 起点としたいコミットID
$ git log --oneline
AAA hogehoge
BBB fugafuga
CCC foo
DDD bar
EEE develop
FFF ・・・
例えば、上記の状況でAAA~DDDを一つにまとめて、developから一回だけのコミットにしたい場合は、
$ git rebase -i EEE
として、続くエディターで、pick
をf(fixup)
にする。
pick DDD bar
f CCC foo
f BBB fugafuga
f AAA hogehoge
コミットメッセージを変更したい
$ git commit --amend -m "新しいコミットメッセージ"
ブランチ名を変更したい
ローカル
$ git branch -m 今のブランチ名 新しいブランチ名
なお、作業中のブランチ名を変更したい場合は今のブランチ名
は省略できます。
$ git branch -m 新しいブランチ名
リモート
$ git push リモート名 :今のブランチ名
$ git push --set-upstream リモート名 新しいブランチ名
(リモートブランチを削除して新しく作成しているだけです)
追跡対象になってない変更も退避したい
$ git stash -u
管理対象にしてたけど、やっぱり.gitignoreに追加したい
.gitognore
を編集したのちに、
$ git rm -r --cached 追跡を解除したいファイルパス
ディレクトリは管理したいけど、その配下のファイルは管理したくない
log
とかtmp
とかディレクトリ自体は管理対象にしたいけど、そこに吐き出されるファイルは管理対象にしたくない場合。
src
log
└── .gitignore
追加したいディレクトリに.gitignore
を追加して、その内容を下記にする。
*
!.gitignore
別ブランチから特定のファイルだけを取得
$ git checkout ブランチ名 ファイルパス
例えば、featureA
というブランチからsrc/sample.js
というファイルだけ引っ張ってきたい場合は、
$ git checkout featureA src/sample.js
addしちゃったけど取り消したい
$ git reset
色々addしちゃったけど特定ファイルだけ取り消したい
$ git reset ファイル名
コミットは取り消したいけどファイルは残したい
$ git reset コミットID --soft
コミットIDには、取り消したいコミットIDではなく、戻したい時点のコミットIDを指定します。
AAA 取り消したいコミット
BBB 戻りたい時点のコミット
の場合、git reset BBB --soft
となります。
コミットもファイルも取り消したい
$ git reset コミットID --hard
コミットログじゃなくて操作ログが見たい
$ git reflog
git log
がコミット履歴であるのに対して、git reflog
は操作履歴。
操作自体のやり直しがここからできる。
reset --hardしちゃったけどそれを無しにしたい
$ git reflog
$ git reset --hard コミットID
削除したブランチを復元したい
$ git reflog
$ git branch ブランチ名 コミットID