たまに使うgitコマンド集

時々使うコマンドって毎回忘れてて毎回ググってる気がするのでここにまとめとく。

編集を取り消す

最後のコミット直後の状態まで戻す

特定のファイルだけなら

git restore <filename>

全ファイルなら

git reset --hard HEAD

たぶんrestore .でもできるけど、簡単に打てすぎて怖いのでこっちで覚える

リモートの状態まで戻す

なんか色々いじっちゃったけど、とりあえずリモートの状態まで戻したいとき

git fetch origin
git reset --hard origin/<branch-name>

必ず今のブランチと同じ名前のブランチで。

git上の操作を色々取り消す

git add を取り消す

ステージ状態を元に戻す。git add .とかして「あ、これいらないじゃん」ってときに。

git reset HEAD <filename>

<filename>部分をしていしなければaddしたの全部取り消し

間違えてコミットしちゃったので一旦取り消す

git reset HEAD^

ステージ前(addする前)の状態まで戻る。編集状態はそのまま。ステージング状態は残したいなら-softオプションつける。

ちなみにコミットになんか追加したいだけならgit commit -amendで事足りる。

push済みのコミットを取り消す

一人開発でもない限り、push済みのコミットをresetしてしまってはマズイ。「コミットを打ち消す」コミットを追加する。

git revert <commitid>

これで「<commitid>と逆内容の編集」をコミットして、実質取り消せる。当然コミットログには元のコミット+打ち消しコミット両方が残る。

-n オプションを付けると「逆内容の編集」を反映だけさせてコミットする前の状態にできる。

マージを取り消す

なんかコンフリクトしたからいったん取り消したいなら

git merge --abort

コンフリクト解消しようと頑張ったけど、諦めてマージ前に戻したいなら

git reset --hard HEAD

普通にマージ完了したけどやっぱ戻したいなら

git reset --hard <マージ前commitid>

push済みマージを取り消す

これはやったことないけどついでに

git revert -m 1 <commitid>

でrevertできるっぽい。-mの後の1は戻したい方の親を指定してる。git show で最初に表示される方が1。

でも「取り消したけどやっぱも一回マージしよう」ができなくなるみたいなので注意。(この場合revertのコミット自体を取り消す)

番外:resetを取り消す

幸いやったことないけど、「間違えてreset –hardしちゃった!」ってときのために書いておく。

git reflog
git reset --hard HEAD@{<n>}

reflogでHEADの動きを追える。HEAD@{0}がどの状態、HEAD@{1}がどの状態とか表示されるのでそれを確認して戻したいところまで戻す

別ブランチのあれだけ持ってきたい

ファイルを持ってくる

git checkout <branchname>--<filename>

コミットを持ってくる

わけあってマージはまだできないけど、あのコミットだけ取り込みたいってとき

git cherry-pick <commitid>

差分を見る

VSCodeのGitLensを使ってるので、だいたいこれで事足りるけど、git diffの使い方をまとめてくれてるページが有ったのでリンクだけ

忘れやすい人のための git diff チートシート – Qiita

push/pull前のリモート差分の確認は使うかな?

git diff HEAD..origin/<branchname> # pull前
git diff origin/<branchname>..HEAD # push前

vscode

Posted by gran-gran-gran