gitのコマンドにエイリアスを定義する
svnクライアントみたいにcommitはciしたいし、checkoutはcoしたいんだ!
git configでエイリアスを定義する その1
git configコマンドで定義するならこんな感じ
- ciでcommitのエイリアスを定義するなら
$ git config alias.ci commit
- オプション付にするならクォートで囲む
$ git config alias.ad "add --all"
$ git congi --global alias.co checkout
git configでエイリアスを定義する その2
.git/configファイルを直接編集してもいける
- configの末尾に以下をコピペすればその1と同じようになる(--globalにするなら~/.gitconfig)
[alias] ci = commit ad = add --all co = checkout
git commit --amendとgit rebase
過去のコミットを変更する手順で定番(?)のamendとrebaseについてメモ
ただコミットを戻したいだけならこっちの手順で戻せる
直前のコミットを変更する
今コミットしたんだけど、ちょっと修正足りてなかったって時
- 今のコミットがこんな感じであって
$ git log --oneline 21b391b sixth commit 2d7fb42 fifth commmit 9994b0b fourth commit
- ファイル1つ変更してコミットしなおす
$ echo "I forgot it" >> six.txt $ git add six.txt
- amendを使って直前にコミットを変更する
- エディタが立ち上がるのでコミットメッセージを良しなに変更する
$ git commit --amend
- diffを見たら修正が入ってて、コミットのSHA-1が変わってる
$ git diff HEAD~ diff --git a/six.txt b/six.txt new file mode 100644 index 0000000..d2c0e78 --- /dev/null +++ b/six.txt @@ -0,0 +1 @@ +I forgot it $ git log --oneline cbe662c sixth commit 2d7fb42 fifth commmit 9994b0b fourth commit
コミットを遡って変更する
ローカルで数回コミットしたんだけど、マージ前にコミットを格好良くしておきたいって時
- ローカルで3コミット分作業したとする
]$ git log --oneline --decorate f08317b (HEAD, master) eighth commit a094ddf seventh commit 32a88b4 sixth commit 2d7fb42 (origin/master, origin/HEAD) fifth commmit
- 3コミットを1つに纏めたいとすると
- pickはそのコミットをそのまま使う
- squashは一つ前のコミットと纏めて、コミットメッセージを付け直す
- fixupは一つ前のコミットと纏めて、前のコミットメッセージを使う
$ git rebase -i HEAD~3 pick 32a88b4 sixth commit squash a094ddf seventh commit #<< squashに変える squash f08317b eighth commit #<< ここも
- 確認すると
$ git log --oneline --decorate a65c1ac (HEAD, master) sixth..eighth commits 2d7fb42 (origin/master, origin/HEAD) fifth commmit
gitであれこれ戻したい
gitで何かを戻したい時、いつもどのコマンド叩くか忘れるのでメモ
ワーキングツリーを元に戻す
ファイル編集したけどまだaddしてない時
$ git checkout . $ git checkout -- . $ git checkout HEAD -- .
どれもHEADの状態にワーキングツリーを戻してくれる。(結果が同じなだけで挙動は違うんだろうけど・・・)
"--"が謎なんだけど、helpを見みるとこんな例があった。
If you have an unfortunate branch that is named hello.c, this step would be confused as an
instruction to switch to that branch. You should instead write:$ git checkout -- hello.c
なるほど、ファイルと同名のブランチがあるとブランチ移動しちゃうから、--つければfile_pathとして解釈してくれるってことね。
indexを元に戻す
addしちゃったやつを戻す時
- ワーキングツリーの変更はそのままでaddだけを戻すなら
$ git reset HEAD
- ワーキングツリーの変更も含めてなかったことにするなら
$ git reset --hard HEAD
commitを元に戻す
commitしたけどやっぱやり戻したい時
- commitだけを戻してaddした状態にするなら
$ git reset --soft HEAD~
- commitとindexを戻してワーキングツリーを編集した状態にするなら
$ git reset HEAD~ $ git reset --mixed HEAD~
- commitもindexもワーキングツリーも戻すなら
$ git reset --hard HEAD~
リモートにpushされてるコミットを元に戻す
pushしたんだけど、やっぱみすってたから戻したい!って時
- 戻したいコミットのSHA-1を調べて
- エディタが立ち上がるのでrevert commitのメッセージを入力する
$ git revert [SHA-1] $ git push origin [branch]