きり丸の技術日記

技術検証したり、資格等をここに残していきます。

自分がよく使うオプション含めたGitコマンド集

自分が使っているGitコマンドを纏める記事。「Gitでこういうことできる!」よりも「Gitをこう使っている」の方が個人個人の使い方の属性が出て面白いんじゃないかと思って、書きました。なお、cherry-pickとかの頭いいコマンドは知りません。

コマンドではなく、IDEに任せた方が楽な操作もあります。

役に立つかどうかは、完全に自分の主観ですので、読者が各自判断してもらえると助かります。

環境

  • Git
    • 2.30.2.windows.1
  • IDE
    • IntelliJ IDEA

前提

  • 所有権のあるリポジトリでの操作
    • OSSをGitHubでForkしてPullRequest出したりするようなコマンドは無し

書かないこと

  • 単語の解説
    • スタッシュ等々

概要

普段の開発では基本的には下の4つで事足ります。

  • git push
  • git pull
  • git stash
  • git stash pop
  • (git addとgit commitはIDE側で処理)

一覧

1人開発ならこれだけ覚えればOK

※ IDEに任せることが多い

  • git add .
  • git commit -m "コミットメッセージ"
  • git push

チーム開発ならこれだけ覚えればOK

  • git pull

(※別ブランチで開発したければ下のコマンドも)

  • git swtich ブランチ名
  • git swtich -c ブランチ名
  • git merge origin master

(※理解していないと危険)

  • git pull --rebase

その他(単体)

  • git reset --hard
  • git reset --hard origin

その他(複数組み合わせ)

  • 一覧には記載しない。

詳細説明

1人開発ならこれだけ覚えればOK

ローカルリポジトリに変更を登録する

git add . とコマンドを打つことで、ローカルの修正を全部Gitに登録することができます。

ですが、基本的にはコミット前に変更差分を確認すべきなので、雑にaddする方法はあまり使わないです。

git add .

IDEだと、git addするファイルを選べたりしますし、addする行を選ぶこともできるので、普段はIDEで操作しています。意図せずに入れてしまった改行を除外できるので便利です。

ローカルリポジトリにコミットする

基本的な使い方のみです。

git commit -m "コミットメッセージ"

git add をIDEでやる都合で、コミットもIDEでやることが多いです。

リモートリポジトリに修正を登録する

IDEでCommitとPushを一気にできることもあるのですが、IDE側で定義したProxy設定に阻まれることがあり、コマンドで打つことが多いです。

git push

チーム開発ならこれだけ覚えればOK

リモートの修正を取り込む

誰かが修正したものを取り込む時のコマンド。常にMasterや開発ブランチで操作している時はこれで充分です。

git pull

実際は、別ブランチで作業することが多いと思うので、こちらのコマンド集を使うこともあります。

git pull origin master
git merge origin/master

コマンド説明

  1. 取り込みたいブランチ(master)を最新化する
  2. 現在のブランチにブランチ(master)の修正を取り込む

リモートの修正を取り込む(ちょっと難易度アップ)

Gitの履歴を汚さないので、トランクベース開発(ブランチ1つのみで開発)にて便利です。

ブランチを切って開発する場合は、コンフリクト地獄やコミット履歴破壊することになるので使わないでください

git pull --rebaseの詳細について知りたい方は、参考記事を読んでください。

git pull --rebase

手元の修正が残っている状態では、git pull --rebaseはできないので、スタッシュと組み合わせます。

git stash
git pull --rebase
git stash pop

その他(単体)

ローカルで行った修正を一気に元に戻したい

新規の機能を開発するときに、上手く機能を導入できなかった時に実行しています。

なお、1つ1つファイルを元に戻すのであれば、IDEに任せた方が簡単です。

git reset --hard

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

コンフリクト修正やマージを行った結果、ローカル環境が壊れてしまい、解決方法が分からないときに実行しています。チーム開発だとよく発生します。

git reset --hard origin

  1. git reset --hard origin で元のブランチを強制的にリモートとローカルを一致させる

その他(複数組み合わせ)

コマンドを打つためだけに一瞬避難させる

コマンドによっては、手元の修正が未コミットだと実行できないことがあります。

git pull --rebaseやgit switch -c feature/branch 等々…。

いったん退避させるために、stashし、終わり次第stash popで退避した修正を戻します。

git stash
# 打ちたいコマンド
# git pull --rebase 等々
git stash pop

ちなみに、退避させておかないと以下のようなエラーメッセージが出力されます。

$ git pull --rebase
error: cannot pull with rebase: You have unstaged changes.
error: additionally, your index contains uncommitted changes.
error: please commit or stash them.

個人的にスタッシュは、今回のように非常に短いライフサイクルで使うなら有用だと思っていますが、1日以上保持し続けたい要望があればブランチ切ったほうが便利だと考えてます。

detached HEAD状態になったり、ロールバック前に現在の状況を残したい

何で壊れたかは分からないけど、手元の修正は残しておきたい、というときにはブランチを切って退避させておきましょう。スタッシュでも問題ありませんが、私が普段使用しているIDEのIntelliJ IDEAではブランチの方が差分確認がしやすい等もあり、ブランチを切りがちです。お好みで選んでください。

# git switch -c 退避ブランチ名
git switch -c feature/conflict
git add .
git commit -m "退避"
git switch -
# detached HEADを解消したければ
# git merge origin/master
# リモートの状態と一致させたければ
# git reset --hard origin

コマンド解説

  1. git switch -c で新しいブランチを作成しつつ、現在のブランチを変更する
  2. git add . で全ファイルを登録する
  3. git commit -m "退避" でコミットメッセージが退避のコミットをする
  4. git switch - で元のブランチに戻る

終わりに

最近はトランクベース開発で行っているので、普段は4つのコマンドしか使ってません。

  • git push
  • git pull -- rebase
  • git stash
  • git stash pop
  • (git addとgit commitはIDE側で処理)

個人的な感想ですが、ブランチ切ると途端に覚えるコスト急激に増えるから嫌いなんですよね…。必要なので、一応覚えましたけど。

覚えれば覚えるほど便利ですが、Gitって所詮ソースコード管理ツールなので、全員ができるだけシンプルに・安全に使えることが大事だと考えてます。

私はここに載せたコマンドで十分ですが、GitHubのPullRequestを作ろうとすると、Fork元に修正があったときに修正を取り込む必要があるので、更に覚えることが増えます。

Gitも難しいですね。Git何も分からない。


この記事がお役に立ちましたら、各種SNSでのシェアや、今後も情報発信しますのでフォローよろしくお願いします。

参考