miyabihitoの日記

個人的な技術メモ

Git

用語

インデックス

コミットとワークツリーの中間に位置する要素。
git add で、インデックスへ登録される。
git commit で、インデックスをもとにコミットが作成される。

ステージ

インデックスに記録すること。

git config

各種設定を行う

  • ユーザ名設定

    git config --global user.name "NAME"

  • メールアドレス

    git config --global user.email "EMAIL"

  • 出力カラーリング

    git config --global color.ui auto

  • コマンドエイリアス

    git config --global alias.[別名] command

  • pullではrebaseを実施する(mergeではなく)

    git config --global pull.rebase true

  • --globalオプションで、設定内容が  $HOME/.gitconfig に書き出される。

  • -l:設定一覧表示

git init

リポジトリの初期化
実行ディレクトリに.git というリポジトリが作成され、
実行ディレクトリを、ワークツリーにする。

  • --bare コマンド実行ディレクトリ自体をリポジトリとする

git add

引数を次のコミット時の記録対象とする
(対象が、ディレクトリの場合は、その中のバージョン管理下のファイル全てが対象になる)

  • -uオプション

    バージョン管理下のファイルすべてを次回コミットの対象とする。

  • -pオプション

    変更点ごとに、インデックスに記録するか否かを選択できる。

  • -Aオプション

    ワークツリー内の全ファイル(.gitignoreで指定されたものは、対象外)をインデックスへ登録する。
    (バージョン管理外だったものも含む)

  • -i

    インタラクティブに選択

git status

ワークツリーとインデックスの差分や、インデックスとコミットの差分等の情報表示。
(次に実行するコマンドの助言も記載されている)

git diff

インデックスとワークツリー間の違いの表示

  • 引数

    • コミットオブジェクト名

    指定のコミット時の記録とワークツリーの差分が表示される

    • ブランチ

    ブランチ間の差分表示(merge前に確認できる)

  • --cached

インデックスと引数のコミット間の違いの表示(コミット未指定時は、HEADと比較)

git commit

git add済みをリポジトリに記録する。(インデックスをもとにコミットを作成する) ファイルを引数に指定すると、そのファイルのみに関するコミットが作成される。

  • -aオプション

    バージョン管理下のファイル全てを、リポジトリに記録する。(git add不要)

  • -vオプション

    コミット時の差分を表示する。

  • --amend

    直前のコミットを上書くコミットを行う

git log

HEADから順に、コミットオブジェクトの内容を表示する。

  • 引数

    パス指定で、対象の変更を含むコミットのみ抽出

  • -pオプション

    各コミットでの、ファイルの変更内容も表示する。

  • --stat

    各コミットでの、変更したファイル情報を表示する。

  • -数字オプション

    表示件数を制限する。

  • --pretty=short

    ログメッセージについては、1段落目だけを表示する。

  • --grep=''

    対象をログメッセージに含むコミットを抽出

  • --all-match

    オプションでの抽出をANDにする(未指定時は、OR)

  • --graph

    コミットやブランチをテキストで視覚的に表示する。

  • --oneline

    一行表示(オブジェクト名とログ表示)

git reset

インデックスやコミットが効果対象。

  • インデックス操作

    指定したファイルのインデックスの状態を最新のコミットと同じにする。addのキャンセル (ワークツリー上の状態は変化しない) ファイル名を引数に指定しない場合は、ワークツリー上の全ファイルが対象。

  • コミット操作

    引数にコミットを指定すると、現在のポインタをそこまで戻す。 ワークツリー上のファイルは、実行時のままで、インデックスは、消去される。

    --hard: 戻したコミットの状態へワークツリーも戻す。

git show

指定したコミットの内容(コメント、変更点等)を表示する。 (未指定時は、HEAD)

git blame

指定したファイルの各行の追加時コミットを表示

git revert (commit id)

引数のコミットをなかったことにするコミットを作成する。
既に、リモートリポジトリで共有されているコミットをなかった事にしたい場合に使える。
(リモートリポジトリに「reset」は使えないため。)

git checkout

ワークツリーが効果対象。

  • 引数

    • パス

    指定したパスをインデックスの内容に戻す。
    パスの前に HEAD等コミットを指定すると、その状態へ戻す。(インデックス内容も消える模様)

    • ブランチ名

    ブランチ名を指定すると、指定ブランチへ切り替わる(ワークツリーも指定ブランチの状態になる)

  • -b ブランチの作成および移動

git rebase

現在のブランチの始まりを指定のブランチへ変更する。

  • -i

    以前のコミットを書き換える

git push (repository) (branch)

指定ブランチの履歴を指定リポジトリへコピー

  • --delete

    ブランチやタグの削除
    git push repo :branch と同義

  • --tags

git clone src dest

リポジトリのコピー コピー先では、コピー元をpush先としてデフォルト設定される

git pull

リモートリポジトリからコミット履歴を取ってきて、マージする。

  • -r
  • --rebase

    fetchした後、mergeではなくrebaseで統合する。
    マージコミットを作らずに、ブランチでの開発を直線的に進められる。

git branch

ブランチ一覧の表示
ブランチ名指定で、ブランチ作成(git branch topic (src))

git show-branch

ブランチの派生を、階層構造で表示する。

git merge branch

指定ブランチの履歴を現在のブランチへマージ

  • --no-ff

    fast-forwardで済むマージでも、新しいコミットを作成してマージする

  • --abort

    コンフリクト時に実行する事で、マージ前の状態を復旧する

git stash

ワークツリーやインデックスの内容を一時保存できる
git stash pop で、保存内容を展開できる

git tag

タグの一覧表示

  • タグ 特定のコミットにタグという目印を付けられる。
    目印付けだけのタグとリリース用にGPGの署名やコメントを付けるタイプがある

git fetch

リモートリポジトリから更新を取得
(オブジェクトやリモートブランチ等)

  • -p
  • --prune

    fetch後に、既に存在しないリモートブランチを削除する。
    (同名のローカルブランチが消えるわけではない。branch -a の結果から消える)

git cherry-pick

指定したコミットでの変更点をHEADにマージする。 (ブランチのマージとは異なり、指定したコミットの親コミットの変更点は取り込まない)

git remote

  • add (name) (url)

    リモートリポジトリの登録

  • rm (name)

    リモートリポジトリの登録解除

  • prune (name)

    リモートリポジトリに存在しないブランチの削除(ローカルブランチの削除ではない)

    • --dry-run 削除対象のブランチの確認
  • show

    リモートリポジトリの表示

git reflog

予約語

  • origin: clone元のリポジトリの別名
  • HEAD: 現在チェックアウトしているコミットを指す名前
  • HEAD^: HEADから一つ前のコミット(^追加でさらに遡る)
  • HEAD~1: 同上
  • ORIG_HEAD: 一つ前の時代のHEAD

参考資料