時々使うけど忘れがちなGitコマンド5選

commit、pull とかに比べるとそんなに使わないけど、時々必要に迫られて、その度に毎回忘れてることが多いGitコマンドってありますよね。

いい加減覚えろよ!って思うけど、40近くになると記憶力も落ちていきます・・・。

そんなわけで、自分のブログに書いておこうという記事です。

時々使うけど忘れがちなGitコマンド5選

リモートリポジトリのブランチをチェックアウト

他の人が上げたリモートリポジトリにある feature というブランチをローカルにチェックアウトするコマンドです。

$ git fetch origin feature
$ git checkout -b feature origin/feature

コミットしたくないけど、一時的に他のブランチにチェックアウトしたい時

他のブランチに移動してちょっと確認したいけど、今の作業が中途半端でコミットしたくない時便利なのが git stash コマンドです。

git stash で変更を一時退避します。

退避した変更を戻すときは git stash pop で行います。

$ git branch
* branchA
  branchB

$ git checkout branchB
error: Your local changes to the following files would be overwritten by checkout:
Please commit your changes or stash them before you switch branches.

$ git stash

$ git checkout branchB
$ git branch
  branchA
* branchB

$ git checkout branchA
$ git branch
* branchA
  branchB

$ git stash pop

コンフリクトしたときにどっちかのブランチの変更を優先したいとき

git checkout –ours で自分の(チェックアウト中)ブランチを優先、git checkout –theirs で他方のブランチを優先できます。

$ git branch
  master
* branchA
  branchB

/* branchA と branchB がコンフリクトした場合 */
$ git merge master
Auto-merging TestViewController.swift
CONFLICT (content): Merge conflict in TestViewController.swift
Automatic merge failed; fix conflicts and then commit the result.

/* branchA を優先(branchB の変更を破棄) */
$ git checkout --ours TestViewController.swift

/* branchB を優先(branchA の変更を破棄) */
$ git checkout --theirs TestViewController.swift

$ git add TestViewController.swift
All conflicts fixed but you are still merging.

$ git commit -m "コンフリクト解消"

現在チェックアウトしているブランチがどっちなのかで –ours と –theirs の意味合いが変わるので間違わないように注意しましょう。

コミットを取り消したい時

git revert [コミットID] で指定したコミットを取り消すことができます。

/* 消したいコミットのIDを確認する */
$ git log
commit コミットID(40桁の文字列)

$ git revert 0123456789ABCDEFGHIJ0123456789abcdefghij

過去のコミットログは削除されず、あくまで「コミットを取り消した」という新しいコミットが記録されます。コミットしたことと取り消したことを残しておきたい場合はこの revert を使いましょう。

コミットを取り消し、且つ履歴自体も消してしまいたい場合

前述の git revert では履歴は残ってしまいます。

全て無かったことにしたい場合は git reset [コミットID]で取り消します。

$ git reset 0123456789ABCDEFGHIJ0123456789abcdefghij

なお、3種類のオプションによって結果が異なります。

  • –soft:commit だけ取り消す(add は取り消さない)
  • –mixed:commit と add を取り消す(オプションをつけないとmixedになる
  • –hard:commit と add を取り消し、且つ編集内容まで取り消す
$ git reset --soft
$ git reset --mixed
$ git reset --hard

以上、他にもあったら追記します。