ここではよく使うGitのコマンドをこういう状況で使うという背景と共にまとめました。
自分用のメモでありますが、もしどなたかの手助けになればと思います。
間違いなどありましたらご指摘ください。今後も随時追加、編集していきます。
STASH 一時避難
タスクAを作業中に、タスクBを優先するように言われてしまった。。でもタスクAはまだ全然途中。。そんな時はSTASHをして、自分の書いたコードを一時避難しておけます。
git stash save “タイトルを書く”
これで書きかけのコードはSTASH(一時避難)されて、コードはブランチは切った状態(作業する前)に戻ります。
さて、タスクBは無事に終わり、タスクAの作業を再開。STASHしておいたタスクAのコードを元に戻す時はまずこのコマンドでSTASHの一覧を確認しましょう。
git stash list
そうすると、こんな風に新しい順にリストが出ます。↓
stash@{0}: On branch_name: タスクA作業途中
stash@{1}: On branch_name: タスクC担当変更のため保留
該当するSTASH、この場合はstash@{0}
なので、このSTASHを適用します。
git stash apply stash@{0}
これで一時避難しておいた書きかけのコードを元に戻す事ができます。
でもこれは既存のファイルを修正していた場合で、新規のファイルを作った場合はGitは監視していないので、STASHしても一時避難されません。なので、新規ファイル、画像を含む場合はこうしましょう。
git stash --include-untracked
git stash -u
でも大丈夫という記事も見かけますが自分はgit stash --include-untracked
じゃないとダメでしたので、こちらを推奨します。
ちなみに、STASHしてしばらく経ってリモートブランチと差分が出てしまった場合はConflictすると思うので、その場合はConflict解消してください。
未マージのリモートブランチをローカルに取り込む
チームメンバーのプルリクエストのレビュー依頼が来たけど、コード読んだだけじゃわからない、自分の環境に取り込んで動作の確認がしたい時。
まずリモートのブランチを取り込む。
git fetch
そしてgit branch -aでリモートのブランチも全て表示させます。
-a
をつけないとローカルのブランチだけが表示されます。
git branch -a
ブランチ一覧が出てきて、リモートのブランチ名は赤色で出てきます。
リモートのブランチ名は大体こんなんだと思います。(ちなみに現在のブランチは緑色)
remotes/origin/team_member_branch
そして、そのブランチをローカルにPULLしつつ、新しいブランチも同時に切るのがこのコマンドです。GitHubのPRからコピペしてしまっても同じです。
git checkout team_member_branch
こうしたら自分の環境でチームメンバーの書いたコードを確認しつつ、動作のチェックもできます。
Pushしたものに余計なファイルを入れてしまってた。。消したい。。
git reset --soft HEAD^
これで直前のCommitを取り消して、ステージング状態(git add した状態)まで戻る
Commit文をミスった時もこれで取り消せます。
git status
これでステージングにあるファイルの一覧が見れますので、不要なファイルのパスをコピーして、resetします。
git reset ファイル名
あとはもう一回commit、pushするだけ。
Commitを増やしたく無い場合は、これで強制プッシュすると前回のCommitに上書きしてくれるので、不要にCommitを増やさずに済みます。
git push -f
マージの取り消し
PR出して無事にマージされたけど、バグが見つかった。。。
すぐに修正したいけど、難しい時、一旦マージを取り消したい。。
まず、プルリクページのRevertボタンをクリック
下の方にあります。
打ち消しのプルリク発行ページに飛ぶので、いつも通り普通にプルリクを発行。タイトルも内容もブランチ名も自動で生成されるので、基本このままでいいと思います
(ローカルルールがある場合はそれに従いましょう)
あとはレビュー依頼など出して、これをマージしてもらえばOK
一連の流れをまとめるとこうです。
↓ 元のコード
↓ 修正してプルリクエスト
↓ マージ
↓ やっぱり外して元のコードに戻したい。。
↓ Revert=元のコードをプルリクエスト
↓ これがマージされると元のコードに戻るという事です
あのコミットした時に戻りたい。。
理由は色々あると思いますが、コンフリクト解消とかでなんかうまくいかなくて、一旦あのコミットした時まで戻したい。。という時あると思います。
// まずはコミット履歴を確認ます。
git log
するとこんな感じでコミットの履歴がでてきますので、commit(英数字の文字列がID)をコピーします。
commit aebb2dc5055f32cf1a952168b8a394c4d2b03fe2
Author: Hisashi Matsui <mail@address.com>
Date: Tue Jan 14 13:02:46 2020 +0900
コミットした時のメモが表示される
// これでこのコミットをした状態に戻ります!
git reset --hard aebb2dc5055f32cf1a952168b8a394c4d2b03fe2