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

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

Gitコマンド

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


管理、設定

git init

  • そのフォルダと配下のフォルダをGitでバージョン管理する

git config

  • Gitの設定を行う
  • 背後ではGit設定ファイルを編集している
  • --globalオプションで全Repository共通の設定になる
  • --localでプロジェクトごとの設定になる
$ git config -global user.name "Taro"
$ git config -global 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 ファイル名

git stash

  • Staging前の変更を後で作業できるように退避する

git stash pop

  • 過去に退避した変更を呼び戻す

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 ブランチ名

git pull

  • Remote Repositoryの変更をWorking Directoryへ取り込む
  • git fetchとgit mergeを一発で実行している
$ git pull origin master

git fetch

  • Remote Repositoryの変更をLocal Reposirotyへ取り込む
  • Working Directoryは変更されない

git clone

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

取り消し

git rm --cached

  • Staging AreaにあるファイルをWorking Directoryへ戻す
  • 変更内容は戻さない
$ git rm --cached ファイル名

git reset

  • HEADを指定した位置に戻す
  • 中間の変更は全て破棄される
  • 取り消した内容の復元は面倒くさい
  • 過去のある地点に戻りたいときに使用する(ロールバック

ヘッドの位置を2つ前のコミットへ戻す例:

$ git reset HEAD~2
  • オプションを何も指定しないと--mixedと見なされる
Working Directory Staging Area
--soft 現状保持 現状保持
--mixed 現状保持 戻る
--hard 戻る 戻る
  • 引数にファイル名を指定すると動作が変わる
  • HEADのファイルをUnstageする例:
$ git reset HEAD README.md
  • 過去のコミットのファイルをStaging Areaに持ってくる例:
$ git reset HEAD^ README.md

git revert

  • 既にremoteにpushした内容を取り消す
  • 指定したコミットを取り消すコミットを作成してコミットする(selective rollback)
    • resetはHEAD位置が戻るがrevertは前へ進む
  • 作ったものの最終的に使わないことになったが履歴を残したいときに使う
  • 取り消した内容を元に戻すのは簡単
  • 何世代も前の変更をRevertするとコンフリクトが発生する可能性がある
$ git revert コミット

ブランチ

git branch

  • ブランチを確認する
$ git branch
  • 全てのブランチを確認する
$ git branch -a
  • ブランチを作成する
$ git branch ブランチ名
  • ブランチを削除する
$ git branch -d ブランチ名
  • RemoteRepositoryのブランチを削除する
$git branch -rd origin/ブランチ名

git checkout

  • ブランチを移動する
$ git checkout ブランチ名
  • HEADやファイルを移動することもできる

git merge

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

差分確認

git diff

  • 差分を表示する

  • Staging前の変更を見る(Staging AreaとWorking Directoryの差分)

$ git diff
  • Stagingした変更を見る(Staging AreaとHEADの差分)
$ git diff --cached
  • 前回のコミット以降の変更を見る(Working DirectoryとHEADの差分)
$ git diff HEAD
  • 前回コミットした変更を見る
$ git diff HEAD^
($ git diff HEAD^..HEADと同じ)
  • コミット同士を比較する
$ git diff ハッシュ..ハッシュ

git diffのオプション

ファイル名のみ表示

--name-only

変更行のみ表示。変更行の前後を表示しない

-U0

次の引数がファイル名であることを明治。推定できる場合は省略可。

-- ファイル名

一つ前のコミット

HEAD^

右側を最新とみなして比較

...
  • 特定のコミットのファイルを比較する
git diff <コミット名>:<ファイル名> <コミット名>:<ファイル名>
  • RemoteRepositoryとLocalRepositoryを比較する
$ git fetch origin master
$ git diff master origin/master

過去のコミット確認

git log

  • 過去の変更履歴を表示
$ git log --one-line

タグ

git tag

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