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 :タグ