入社して1年間でよく使ったGitコマンドまとめ

プログラマーデビューして約1年弱、その期間でよく使ったGitコマンドまとめです。

基本的なコマンド紹介ではなく

「◯◯の状態を◯◯したい」

というような例を上げて紹介していきます。

なお、rebaseなどを使ってコミット履歴はガンガン書き換えているものを紹介してます。
チーム規約によっては好まれない場合もあるかもしれません。

スポンサーリンク

conflictが出ている時にスマートに解消する

作業ブランチと開発ブランチでconflictが出ている場合に解消させる

例:開発ブランチはdevelop。現在は作業ブランチで作業している。

git pull --rebase origin develop
〜conflictをエディタで修正後〜
git add .
git rebase --continue
 
git push --force-with-lease

conflictはしょっちゅう発生するのでpull --rebaseは高頻度で使う。

基本的に作業するブランチの状態は「最新の開発ブランチの状態」と同じにしておきたい。
「PRを見てもらう前」「マージする前」など使う機会は多い。

rebaseを使っている理由は以下の説明とかが分かりやすい。
マージコミットは基本的に不要だったのでrebaseを使っていた。

ローカルをリモートと強制的に一致させる

細かいことはどうでもいいので、サクッとローカルとリモートを一致させたい時に使う。

例:「なんか色々修正加えたけど全部間違えてた!とりあえず戻そう!」

git fetch origin branchA
git reset --hard origin/branchA

ここでは例としてbranchAを指定している。
「指定したブランチの現在の状態」に強制的に一致になることに注意する。

ブランチのコミットを1から積み直す

「レビュー→修正」の繰り返しで

「◯◯の修正」
「◯◯の修正」
「◯◯の修正」

みたいなコミットがたくさん積み上がる時って必ずありますよね。

その場合、紆余曲折を経てLGTM後、「即マージ!」とするのはマズイ時があります。

このままマージするとかなりコミットログが汚くなるからです。(「◯◯の修正」だらけのコミットログになる)

そこでコミットログをキレイにするために、コミットを再度積み直す時に使います。

git reset --soft origin/develop
git reset .

開発ブランチはdevelop。developから切ったブランチで作業している想定。

やっていることは、
「コミットの取り消し(ブランチを切った直後まで)」
「addされた状態も取り消し」

なお、git reset --mixed origin/developだと一行で済む。

コミットを積み直した後は

git push --force-with-lease

で強制的にpushする。
基本的に一つのブランチで共同開発することはなかったので git revertはあまり使わなかった。(revertのコミットが生まれるので)

リモートにpushしたコミットを元に戻す

「やっぱpushしなければよかった!」という時に元に戻す方法。
「リモートにpushしたコミット」というものを跡形もなく消す方法。

「コミットID」は戻したいコミットの一つ前を指定して git resetする。
HEAD指定の方は例として一つ前を指定している。

git reset --hard コミットID
or
git reset --hard HEAD^

これで「ローカル」は戻したい状態まで戻る。
次のコマンドで「リモート」を戻す(ローカルと一緒の状態にする)

git push --force-with-lease

これで戻った「ローカル」の状態を「リモート」に強制的にpush。
これで結果的にpushしたコミットが取り消された事になる。

1つのファイルだけ別のブランチから持ってくる

「他の人が別ブランチで開発しているファイルを試しにこっちのブランチでも使いたい」
「でもまだ開発ブランチにはマージされていない・・・」

git checkout で特定のファイルだけを持ってくる事も出来る。

git checkout ブランチ名 -- ファイル名

git checkout origin/sample -- app/assets/stylesheets/sample/sample.css.scss

指定したファイルがgitでいつ変更されたかを確認する

「このファイル、自分の知らぬ間に変な修正が入っている・・・」
「誰がいつ修正を加えたかチェックしたい」

そんな時はコマンドでサクッと確認出来る。

git log -p ファイル名

例としてsampleブランチを指定している。

gitの操作を間違えた!

gitで操作していると結構ミスをすることがある。
例えば、git reset --hardで戻りすぎたり、rebase間違えたりブランチ消したり。

そんな一見致命的なミスでも、「履歴」から戻ることが出来るのがgitの凄い所

git reflog
git reset --hard HEAD@{1}

git reflogではHEADの移動履歴というものが見れる。
その移動履歴をHEAD@{n}という形で指定してあげてgit reset --hardすると元に戻れます。
ここでは@{1}を指定しているので、HEADの履歴を1つ前に戻していることになります。

上記のようなミスはこのreflogで大抵カバー出来ます。
しかしHEADの移動を伴わないgitの操作は戻せないので注意。

フォローする

スポンサーリンク