はじめに
git version
コマンド |
説明 |
git version |
Gitのバージョンを出力する |
git clone
コマンド |
説明 |
git clone {リポジトリのURL} |
対象リポジトリのデフォルトブランチをクローンする |
git clone --depth {深さ} {リポジトリのURL} |
対象リポジトリのデフォルトブランチを指定したコミット数で切り詰めてクローンする |
git clone -b {ブランチ名} {リポジトリのURL} |
対象リポジトリの対象ブランチをクローンする |
git clone --recursive {リポジトリのURL} |
サブモジュールを含む対象リポジトリのデフォルトブランチをクローンする |
git clone --depth 1 {リポジトリのURL} |
履歴が多いリポジトリをクローンする時間を短縮できます |
git remote
コマンド |
説明 |
git remote |
リモートリポジトリの一覧を出力する |
git remote add {リモートリポジトリ名} {リポジトリのURL} |
対象リポジトリをローカルのリモートリポジトリに追加する |
git remote rename {旧リモートリポジトリ名} {新リモートリポジトリ名} |
ローカルの対象リモートリポジトリをリネームする |
git remote remove {リモートリポジトリ名} |
対象リモートリポジトリをローカルから削除する |
git branch
コマンド |
説明 |
git branch |
ローカルブランチの一覧を出力する(チェックアウト中のブランチに * が付く) |
git branch -r |
リモートブランチの一覧を出力する |
git branch -a |
ローカルブランチとリモートブランチの一覧を出力する |
git branch {ブランチ名} |
対象ブランチを新規作成する(チェックアウトしない) |
git branch -d {ブランチ名} |
対象ブランチを削除する |
git branch -f {ブランチ名} |
対象ブランチを強制削除する |
git branch -D {ブランチ名} |
対象ブランチを強制削除する |
git branch -m {旧ブランチ名} {新ブランチ名} |
対象ブランチをリネームする |
git branch --set-upstream-to=origin/リモートブランチ名 ローカルブランチ名 |
ローカルのYYYブランチの追跡するリモートブランチをXXXへ変更 |
git branch -VV |
ローカルブランチ名,状態,追跡するリモートブランチ名を表示 |
git checkout
コマンド |
説明 |
git checkout {ブランチ名} |
対象ブランチに切り替える |
git checkout -b {ブランチ名} |
対象ブランチを新規作成し、切り替える |
git checkout {ファイルパス} |
ワーキングディレクトリにある対象ファイルの変更を取り消す |
git checkout . |
ワーキングディレクトリにある全ファイルの変更を取り消す |
2.23.0で git switch
と git restore
コマンドが追加され、git checkout
コマンドを使わなくても済むようになりました。
git restore
基本的に指定したファイルの変更を取り消し,最後にコミットされた状態へ戻す.
コマンド |
説明 |
git restore {ファイルパス} |
ワーキングディレクトリにある対象ファイルの変更を取り消す |
git restore . |
ワーキングディレクトリにある全ファイルの変更を取り消す |
git restore --source {コミットID} {ファイルパス} |
対象ファイルの変更を対象コミットに戻す |
単にステージ(git add
)したワーキングディレクトリの変更を取り下げる場合は,オプションに--staged
を用いる.
コマンド |
説明 |
git restore --staged {ファイルパス} |
対象ファイルのステージングを取り消す |
git restore --staged . |
全てのステージングを取り下げる |
git diff
コマンド |
説明 |
git diff |
ワーキングディレクトリにあるファイルの差分を出力する |
git diff --cached |
インデックスにあるファイルの差分を出力する |
git status
コマンド |
説明 |
git status |
変更したファイルの一覧を出力する |
git status -s |
git status を短い形式で出力する |
git status -s -b |
短い形式でもブランチとトラッキングを出力する |
git add
コマンド |
説明 |
git add {ファイルパス1} {ファイルパス2}... |
対象ファイルをインデックス(コミット対象)に追加する |
git add -A |
変更した全ファイルをインデックスに追加する |
git add -p {ファイルパス} |
対象ファイルをハンク単位でインデックスに追加する |
git reset
コミットを取り消す際に用いる.
git reset (option 1) (option 2)
- option1:コミット取り消し後の状態の指定(デフォルトでは --mixed)
- option2:戻る先のコミットの指定(デフォルトでは HEAD の1つ前のコミット)
コマンド |
説明 |
備考 |
git reset --soft |
最新のコミットを取り消し、その変更をステージングエリアに残す(git add状態は保持) |
git commit により最新のコミットを(新たなコミットとして)復元可能 |
git reset --mixed (デフォルト) |
最新のコミットを取り消し、その変更をワーキングディレクトリに残し、ステージングエリアから外す |
git add からのgit commit により、最新のコミットを復元可能 |
git reset --hard |
最新のコミットとすべての変更を取り消し、ワーキングディレクトリとステージングエリアを完全にリセットする(変更内容が失われる) |
ワーキングディレクトリの変更が取り消されているためgit add ,git commit では復元できない |
git reset --hard ORIG_HEAD |
直前の git reset 操作を元に戻す(通常、git reset --hard の取り消し) |
|
最新のコミットを取り消すため,共通して最新のコミット以降の変更を間接的に取り消すことに注意.
コミットに作用せずに単にステージングを取り消す(ワーキングディレクトリの変更自体はそのまま)操作を行うにはHEAD
を付け加える(つまり,git reset --mixed HEAD
).
コマンド |
説明 |
git reset HEAD {ファイルパス} |
ステージングエリアにある対象ファイル(git add {ファイルパス} を取り消す |
git reset HEAD |
ステージングエリアにある全ファイル(git add -A )を取り消す |
`git reset HEAD` と `git restore --staged .`
どちらも機能面では同じ.ただし,ニュアンスが少し異なる.
-
共通点
- ステージングエリアにある変更をワーキングディレクトリに戻す
- コミット履歴には影響を与えない.ステージングされている変更を解除するだけで、ワーキングディレクトリにはその変更が残る
-
微妙な違い
- git reset HEAD
古いGitのバージョンから存在しており,ステージングエリア全体や特定のファイルを扱う場合に使われる.HEADを基準として操作を行うため、直感的には「HEADに対してリセットを行う」という感じ.
- git restore --staged
Git 2.23以降で導入された新しいコマンドで,より明示的な操作を可能する.このコマンドは、ワーキングディレクトリとステージングエリアの変更を独立して操作するために設計されている.
git commit
コマンド |
説明 |
git commit |
指定したエディタでメッセージを書き、インデックスにある全ファイルをコミットする |
git commit -m "{メッセージ}" |
メッセージを付け、インデックスにある全ファイルをコミットする |
git commit --amend |
<要追加> |
「指定したエディタ」とは、.gitconfig
の editor
で指定しているエディタのことです。
git revert
コマンド |
説明 |
git revert HEAD |
直前のコミットを元に戻すコミットを作成する |
git revert {コミットID} |
対象コミットを元に戻すコミットを作成する |
git push
コマンド |
説明 |
git push origin {ローカルブランチ名} |
対象ローカルブランチを origin にプッシュする |
git push -d origin {リモートブランチ名} |
対象リモートブランチを origin から削除する |
git push origin {タグ名} |
対象タグを origin にプッシュする |
git push -d origin {タグ名} |
対象タグを origin から削除する |
git push -f |
強制プッシュする |
git push --force-with-lease |
強制プッシュする(ブランチのアップストリームが変更されている場合などは拒否する) |
git fetch
コマンド |
説明 |
git fetch origin |
origin から最新の履歴を取得する |
git fetch --prune origin |
リモートリポジトリ上に存在しなくなったブランチなどの参照を削除し、origin から最新の履歴を取得する |
git rebase
コマンド |
説明 |
git rebase origin/{ブランチ名} |
origin にある対象ブランチを、チェックアウト中のブランチへリベースする |
git rebase --continue |
リベースを続ける |
git rebase --abort |
リベースを強制終了する |
git rebase --quit |
リベースを中止する |
git merge
コマンド |
説明 |
git merge origin/{ブランチ名} |
origin にある対象ブランチを、チェックアウト中のブランチへマージする |
git merge --squash origin/{ブランチ名} |
origin にある対象ブランチのコミットをひとつにまとめ、チェックアウト中のブランチへマージする |
git merge --continue |
マージを続ける |
git merge --abort |
マージを強制終了する |
git merge --quit |
マージを中止する |
git cherry-pick
コマンド |
説明 |
git cherry-pick {コミットID} |
対象コミットをチェリーピックする |
git cherry-pick {始点の1つ前のコミットID}..{終点のコミットID} |
始点から終点までのコミットをチェリーピックする |
git cherry-pick {始点のコミットID}^..{終点のコミットID} |
始点から終点までのコミットをチェリーピックする |
git cherry-pick --skip |
現在のコミットをスキップして、残りのシーケンスを続ける |
git cherry-pick --quit |
失敗したチェリーピックを取り消す |
git stash
コマンド |
説明 |
git stash list |
スタッシュの一覧を出力する |
git stash show |
スタッシュの変更を出力する |
git stash push -m "{メッセージ}" |
メッセージを付け、変更をスタッシュにプッシュする |
git stash pop |
スタッシュの変更をワーキングディレクトリに戻す(スタッシュから消える) |
git stash apply |
スタッシュの変更をワーキングディレクトリに戻す(スタッシュから消えない) |
git stash drop |
スタッシュから変更を削除する |
2020/03/12現在、git stash save
は非推奨です。代わりに git stash push
を使いましょう。
スタッシュについては、以下の記事が参考になります。
https://qiita.com/chihiro/items/f373873d5c2dfbd03250
git log
コマンド |
説明 |
git log |
ログを出力する |
git log --graph --name-status --pretty=format:"%C(red)%h %C(green)%an %C(Cyan)%ad %Creset%s %C(yellow)%d%Creset" |
ぼくのかんがえたさいきょうのぎっとろぐ |
HEAD
HEAD
ORIG_HEAD
特定のGit操作(主にgit reset、git merge、git rebaseなど)を行う前のHEADの位置を一時的に保存するポインタ.
- 主な使用法
git reset
やgit merge
などを実行する前の状態に戻りたい場合に使う.
- 例:
git reset
→ git reset --hard ORIG_HEAD
-
git reset
を実行すると、その前のHEADの位置がORIG_HEADに保存される.
- このポインタ(ORIG_HEAD)をもとに、
git reset ORIG_HEAD
で操作を元に戻すことができる.
- 参考:ORIG_HEADの使用例