プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

Gitコマンド

使用頻度の高いGitコマンドをまとめた。


初期化・設定

git init

  • current directoryをGitでバージョン管理する

git config

  • Gitの設定を行う
  • 背後ではGit設定ファイルを編集している
  • --globalオプションで全プロジェクト共通の設定
  • --localでプロジェクトごとの設定(デフォルト)
  • --listで設定を表示
  • --unsetで指定した設定を削除
$ git config user.name "Taro"
$ git config user.email taro@suzuki.com

変更管理

git status

  • 状態確認

git add

  • 変更したファイルをStaging Areaに移動する
git add ファイル名

git commit

  • Stating Areaの変更をコミット
$ git commit -m "コメント"

git rm

  • Gitで管理しているファイルを削除する
  • 普通にrmで削除すると空ファイルが残ってしまう
$ git rm ファイル名

Remote Repositoryとの連携

git remote add origin

  • Remote Repositoryの登録
$ git remote add origin https://github.com/<user-id>/<repo-name>.git

git push

  • Local Repositoryの変更をRemote Repositoryに反映
$ git push origin ブランチ名
  • upstream branchが設定されている場合、git pushのみでよい
  • upstream branchの設定とPushを同時に実施したい場合は以下のように行う
$ git push -u origin ブランチ名

git pull

  • Remote Repositoryの変更をWorking Directoryへ取り込む
  • git fetch + git mergeのショートカット
$ git pull origin ブランチ名
  • upstream branchが設定されている場合、git pullのみでよい

git fetch

  • Remote Repositoryの変更をLocal RepositoryのRemote Tracking Branchへ取り込む
  • Working Directoryは変更されない
    • Working Directoryに反映するにはマージする

git clone

  • Remote Repositoryをローカル環境に複製する
$ git clone https://github.com/<user-id>/<repo-name>.git .

取り消し

git restore

  • StagingしていないWorking Directoryの変更を元に戻す
$ git restore .

git restore --staged

  • Staging AreaにあるファイルをWorking Directoryへ戻す
  • Working Directoryの変更は戻さない
$ git restore --staged .

git reset

  • HEADを指定した位置に戻す
  • 中間領域に残った変更の扱いはオプションによって異なる
    • オプションごとの振る舞いは下記表の通り
    • デフォルトは--mixed
Working Directory Staging Area コミット履歴
--soft 現状保持 現状保持 戻る
--mixed 現状保持 戻る 戻る
--hard 戻る 戻る 戻る

コミット履歴を2つ前のコミットへ戻し、Staging Area、Working Directoryの変更を破棄する例。

$ git reset --hard HEAD~2

注意:引数にファイル名を指定すると挙動が大きく変わる。 挙動とコマンドが直感的に結びつかないため、利用は推奨されない。 他の直感的なコマンドの利用が推奨されているが、知識として頭の片隅に入れておくと良い。

  • HEADのファイルをUnstageする例:
$ git reset HEAD README.md
  • 過去のコミットのファイルをStaging Areaに持ってくる例:
$ git reset HEAD^ README.md

git revert

  • 指定したコミットを取り消すコミットを作成してコミットする
  • 作ったが最終的に使わないことになり、履歴だけ残したいときに使う
  • 履歴が残っているので取り消した内容を元に戻すのは簡単
  • 何世代も前の変更をRevertするとコンフリクトが発生する可能性がある
  • Remote RepositoryにPushした内容を取り消したいときはrevertしてpushする
$ git revert コミットID

ブランチ管理

git branch

  • ブランチを表示する
$ git branch
  • 全てのブランチを表示する
$ git branch -a
  • ブランチを作成する
$ git branch ブランチ名
  • ブランチを削除する
$ git branch -d ブランチ名
  • Remote Repositoryのブランチを削除する
$git branch -rd origin/ブランチ名
  • upstream branchを設定する
git branch -u origin/<リモートブランチ名> <ローカルブランチ名>

git checkout

  • ブランチを移動する
$ git checkout ブランチ名
  • HEADやファイルを移動することもできるが直感的ではないので非推奨

git merge

  • ブランチAにブランチBをマージする
$ git checkout ブランチA
$ git merge ブランチB

git rebase

  • ブランチAの先端にブランチBをつける
$ git checkout ブランチB
$ git rebase ブランチA
$ git checkout ブランチA
$ git merge ブランチB

差分確認

git diff

  • まだStagingされていない、Working Directoryにのみ存在する変更
$ git diff
  • Staging AreaとHEADの差分
$ git diff --staged
  • Working DirectoryとHEADの差分
$ git diff HEAD
  • コミット同士を比較する
$ git diff コミットID..コミットID
  • 特定のコミットのファイルを比較する
git diff <コミット名>:<ファイル名> <コミット名>:<ファイル名>
  • 前回のコミット(HEAD^)から直近のコミット(HEAD)の間の変更
    • ..の右側を省略するとHEADを指定したとみなす
$ git diff HEAD^
($ git diff HEAD^..HEADと同じ)
  • ブランチAの先端とブランチBの先端を比較
$ git diff ブランチA..ブランチB
  • ブランチAとブランチBの共通祖先とブランチBの先端を比較
$ git diff ブランチA...ブランチB
  • Remote RepositoryとLocal Repositoryを比較する
$ git fetch origin main
$ git diff HEAD..origin/main(Pullしていないリモートの変更)
$ git diff origin/main..HEAD(Pushしていないローカルの変更)

git diffのオプション

  • ファイル名のみ表示
--name-only
  • 変更行のみ表示。
    • 変更行の前後を表示しない
-U0
  • 次の引数がファイル名であることを明示。
    • 推定できる場合は省略可。
-- ファイル名

過去のコミット確認

git log

  • 変更履歴を表示
$ git log

タグ

git tag

  • タグを付与する
$ git tag タグ
  • 作成したタグをRemote Repositoryに反映する
$ git push origin タグ
  • タグ削除(コミット自体は削除されない)
$ git tag -d タグ
  • 削除したタグをRemote Repositoryに反映する
git push origin :タグ