83
48

More than 1 year has passed since last update.

お題は不問!Qiita Engineer Festa 2023で記事投稿!

困った時の逆引きGit操作

Last updated at Posted at 2023-06-20

コミットログを一行表示で見たい

$ 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

として、続くエディターで、pickf(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
83
48
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
83
48