ーーーーーーーーーーーーーーーーーーーーー8/30追記ーーーーーーーーーーーーーーーーーーーーーーーーー
Gitバージョン2.23.0がリリースされ、新たにgit switch
とgit restore
というコマンドが追加されました。
checkout
では本記事で紹介していない内容も含め、色んな事ができました。しかし、できる事があまりにも多い為、わかりやすくする目的でswitch
とrestore
に分けたといった感じです。
本記事ではcheckout
はブランチの移動に関してしか記述していない為、checkout
は全てswitch
に置き換える事ができます。もちろん、これまで通りcheckout
を使用することも可能です。
checkout
→ switch
checkout -b
→ switch -c
(-c
はcreateの略)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
はじめに
業務上gitをよく使います。よく使うコマンドさえも覚えてなくググる事も多いので、検索時間の短縮の為にも自分用に一か所にまとめようと思いました。
入社当時は先輩方の口から飛び交うカタカナ言葉が私と同じ日本人の会話とは思えませんでしたが、今ではちょっと理解できるようになりました。git用語もそうですが、「プログラミング言語よりも先にIT用語覚えなきゃ会話ができない!」と感じたのはいい思い出。
今後新しいコマンドを使うようになったり、git操作で何かやらかしたらその都度更新します。
ブランチ編
hoge(ブランチ名)で作業してね
hogeブランチに移動してからコードいじってねって意味。
git checkout hoge
で移動できる。
ちゃんと移動できたか不安な人は
git branch
で、現在自分がどこのブランチにいるか確認できる。間違ったブランチで作業を進めないためにも、心配性の私はこのコマンドをよく打つ。
hogeブランチは存在するはずなのに、そのリポジトリは見つからないよ!ってエラーが出る場合は、
git fetch
で最新状態に更新してから、checkout
でいける!
hoge(ブランチ名)からブランチ切って作業してね。ブランチ名はfugaでいいよ
hogeブランチから新しくfugaブランチ作って、そこで作業してねって意味。
hogeに
git checkout hoge
で移動。その後に
git checkout -b fuga
でfugaブランチを作成&移動できる。
git checkout -b
はfugaブランチがない場合、新しく作成してから移動してくれるコマンド。
git checkout
だと既に存在するブランチにしか移動はできなく、fugaブランチはないよとエラーが返ってくる。
このhogeってブランチ、名前をfugaに変えてくれない?
git branch -m hoge fuga
もし現在いるブランチがhogeなら、コマンドが短縮できて
git branch -m fuga
でok。
もう使ってないブランチあったら消しといてね
不要になったブランチの削除は
git branch --delete hoge
git branch --delete origin hoge リモートブランチの削除ならこっち
作業してて途中から不要になったブランチの削除は
git branch -D hoge
--delete
と-D
の違いは、--delete
だとマージしていない変更点があるとエラーが出てブランチ削除ができないが、-D
だとそんなのおかまいなしで強制削除ができる。
ちゃんとpullした?常に最新の状態維持してね
作業前に
git pull
を忘れてはいけない(戒め)
git pull origin hoge
でpull
先のブランチを指定することができる。
stash編
今やってる作業中断してこっちの対応やってくれる?ブランチはhogeでお願いね!
今やってる作業をそのままに他のブランチに移動する事はできないので、
①作業途中の物を一度commit
する
②stash
で退避させ一時保存する
この二択である。
中途半端な状態でコミットを作ってしまうと、乱立してしまい後で履歴を見返すときに見づらくなってしまうのでstash
がおすすめ。stash
後のブランチは変更が取り消された綺麗な状態になります。
stash
での退避は
git stash
これでok。ちゃんとできたか確認しよう。
git stash list
これでstash
で退避されているリストが表示される!
後から見返したい時にわかりやすくしたい場合は、メッセージも付けて退避しよう。
git stash save "hogemessage"
これでhogemessageってメッセージもセットでstash
に退避されました。
stash
から取り出すには、git stash list
で取り出したい対象を確認して
git stash pop stash@{n}
で、番号を指定して取り出せる。list
で確認する必要もなく、最新のstash
を取り出したいなら、
git stash pop
でok
stashに色々入ってるけど、必要ないならちゃんと消しといてね
git stash drop
で最新のstash
を
git stash drop@{n}
で、n
で指定した番号のstash
を削除できる。
stash
を全て消したいのであれば、
git stash clear
これでgit stash drop
でちまちま消さずとも全消しできる。
cherry-pick編
hogeブランチで作業してると思うんだけど、今の作業、fugaブランチでやってくれない?え?もうhogeでコミットしちゃった?
まだコミットしていなければ
git stash
git checkout fuga
git stash pop
で作業内容をそのままにブランチの移動はできるが、コミット済であればstash
は使用できない。そんな時はコミットごと移動できるcherry-pick
の出番。
まずはlog
を確認して持ってきたいコミットのIDをコピーしておこう。
git log
で対象のコミットのコミットIDをコピーして、
ブランチ移動→cherry-pick
で対象のコミットを持ってくる→新しいブランチで再度push
でok
git checkout fuga
git cherry-pick コミットID
git push
やらかし対処編
コミット名間違えた!
プッシュ前なら何も焦ることはない。--amend
を付けてcommit
コマンドを打ち直すだけでコミット名の変更ができる。
git commit --amend -m "new hoge"
プッシュ後なら諦めるか、コミットにメッセージ残しておくか、次で紹介するリバードで取り消してから正しいコミット名で再度push
しよう。
pushしたけどバグだらけでやだ!恥ずかしい!取り消したい!
revert
コマンドで指定のコミットの変更をなかった事にできる打ち消しコミットを持ってこれる。ただし、やらかしの履歴は残る。
履歴を残さず消すコマンドもあるが、個人開発なら履歴が汚くても問題ないし、業務ならなおさら下手なことはせずミスは認めよう。間違っても強制プッシュ git push -f
は使用してはいけない。
git log
で取り消したいコミットのIDをコピーして
git revert コミットID
これで入力したIDのコミットを打ち消すコミットができた。後はこれをpush
しておしまい。
git push
さいごに
ここまで読んでくださってありがとうございます。
間違っている説明や記述などございましたら教えてください!