Git - コマンドライン

参考書籍

独習Git

独習Git

コマンドライン構文

$ git [スイッチ] <コマンド>

$ git -p config --global user.name "taro"

gitの設定

バージョン

$ git --version

コミットに付加される名前を設定

$ git config --global user.name <user_name>

コミットに付加されるメールアドレスを設定

$ git config --global user.email <user_email>

コマンドラインの出力を見やすくる色を設定

$ git config --global color.ui auto

設定値の一覧

$ git config --list

デフォルトエディタの設定

$ git config --global core.editor 'code --wait'

エディタを起動

$ git config --local --edit
$ git config --global --edit
$ git config --system --edit

リポジトリの設定

リポジトリを作成

$ git init

指定した名前でローカルリポジトリを作成

$ git init <project_name>

リモートリポジトリの設定を指定した名前で追加

$ git remote add <name> <url>

リモートリポジトリの設定を変更

$ git remote rename <old_name> <new_name>

指定したURLのリポジトリをローカルリポジトリとして複製

※destination_dirを省略した場合ソースリポジトリをベースとしたディレクトリを作成する

$ git clone <source_url> <destination_dir>

変更履歴の登録

リポジトリの状態とステージングエリアの状態を確認

$ git status

ワーキングディレクトリの変更をステージングエリアに追加

$ git add <file>

ワーキングディレクトリの変更をステージングエリアに追加(予行演習)

$ git add --dry-run .

ワーキングディレクトリの全ての変更をステージングエリアに追加

$ git add --all

ワーキングディレクトリの全ての変更をhunk毎、対話的に追加

$ git add --patch <file>

ワーキングディレクトリの変更をコミットしたバージョンに戻す

$ git checkout -- <file>

ステージングエリアから削除、ファイルへの変更は残す

$ git reset <file>

ステージングエリアから削除、ファイルへの変更内容は全て破棄

$ git reset --hard

ワーキングディレクトリとステージングエリアの差分を表示

$ git diff <file>

ステージングされた変更をコミット(簡易)

$ git commit -m "initial commit."

ステージングされた変更をコミット

※詳細、テキストエディタが起動されるので、ミットメッ-ジを入力、保存

$ git commit

特定のコミットを指定してそれをコミット

$ git cherry-pick <commit_id>

直近のコミットメッセエージを修正する

$ git commit --amend

ブランチの操作

リポジトリ上のローカルブランチの一覧を標示

$ git branch
$ git branch --column

ローカルブランチとリモート追跡ブランチの一覧を表示

$ git branch -a

ローカルブランチとリモート追跡ブランチの一覧、SHA1-IDを表示

$ git branch -v

新規ブランチを作成

※現在のHEADが指し示すブランチから作成、チェックアウトは行われていない

$ git branch <branch_name>

指定したブランチに切り替え

※コミットしていない変更内容はそのまま

$ git checkout <branch_name>

指定したブランチの作成と切り替えを同時に行う

$ git checkout -b <branch_name>

指定したブランチの履歴を現在のブランチにマージ

$ git merge <branch_name>

マージの中止

$ git merge --abort

指定したローカルブランチを削除(未コミット、チェックアウト中は不可)

$ git branch -d <branch_name>

指定したローカルブランチを削除(未コミットでも強制削除)

$ git branch -D <branch_name>

指定したブランチ名を変更

$ git branch -m <branch_name>

ステージングエリアの変更内容をワーキングディレクトリに上書き

$ git checkout <file>

特定のコミットを指定しチェックアウト

$ git checkout <commit_id>

特定のコミットを指定しチェックアウトした後に何かしら作業、で本来の HEAD (master) に戻る

$ git checkout -f master

タグを作成(現在のブランチ)

$ git tag <tag_name>

タグを作成(現在のブランチ、注釈付き、エディタが立ち上がるのでメッセージを入力)

$ git tag -a <tag_name>

タグを作成(後から指定したブランチに対して、注釈付き)

$ git tag -a <tag_name> -m <message> <commit_id>

タグの削除

$ git tag -d <tag_name>

タグの一覧(コメントも同時)

$ git tag -n

リベース(ローカルブランチの開始地点を変更)

$ git rebase <branch_name>

ファイルの移動と削除

ファイルの削除(ワーキングディレクトリにあるファイルを削除、ステージングエリアに追加)

$ git rm <file>

ファイルの削除(ステージングエリアにあるファイルのみを削除)

$ git rm --cached <file>

ワーキングディレクトリのファイル名(ディレクトリ名)を変更、ステージングエリアに追加

$ git mv <file-original> <file-renamed>

指定したファイルをcommit_idの内容に戻し、かつステージングエリアに追加される

$ git checkout <commit_id> <file_name>

.gitignore で指定する前に登録したファイルを削除

$ git rm --cached <target_file>

.gitignore で指定する前に登録したディレクトリを削除(物理ファイルは削除されず、インデックスからのみ削除)

$ git rm -r --cached <target_dir>

ワーキングディレクトリの追跡対象外のファイルをもとに戻す(削除対象を確認)

$ git clean -n

ワーキングディレクトリの追跡対象外のファイルをもとに戻す(強制削除)

$ git clean -f

一時的な変更の記録

作業途中でのブランチの切り替え(stash)

$ git stash # 一時待避

$ git stash save "message" # メッセージを付けて一時退避

$ git stash pop # 最新のスタッシュを適用し、削除

$ git stash pop stash@{N} # N番目のスタッシュを削除

$ git stash apply # 最新のスタッシュを適用し、残す

$ git stash apply stash@{N} #N番目のスタッシュを適用し、残す

$ git stash clear # 全削除

$ git stash list #リスト標示

$ git stash drop # 最新のスタッシュを削除

$ git stash drop stash@{N} # N番目のスタッシュを削除

$ git stash clear # 全削除

履歴の確認

現在のブランチのバージョン履歴を一覧で表示

$ git log

現在のブランチのバージョン履歴を一覧で表示(各履歴を一行で表示)

$ git log --oneline

2つのブランチ間の差分を表示

git diff <first_branch> <second_branch>

ステージングエリアと最新のコミットの差分を表示

git diff --cached
または
git diff --staged

指定されたコミットのメタ情報と変更内容を表示

$ git show <commit_id>

指定されたファイルの各行毎に、最終変更の情報を表示

$ git blame <file>

指定コミットのリビジョンの内容をワーキングディレクトリに反映(全てのファイルをcommit_idの状態に戻す)

$ git checkout <commit_id>

履歴の修正

指定コミットによって加えられた変更をもとに戻す新しいコミットを作成、適用(コミットを打ち消すコミット)

$ git revert <commit_id>

現在のブランチのHEADを指定コミットまで移動、ステージングされた内容をクリアし、ワーキングディレクトリの変更状態を保つ

※ワーキングディレクトリの作業内容は保持される

$ git reset <commit_id>

現在のブランチのHEADを指定コミットまで移動、ステージングエリアとワーキングディレクトリの状態をクリア

※ワーキングディレクトリの作業内容は保持されない

$ git reset --hard <commit_id>

コミット履歴を修正(rebasee -i)

$ git rebase -i <commit_id>

コマンド 説明
pick コミットを利用する
reword コミットを利用するが、コミットコメントを編集する
edit コミットを利用するが、amend刷るために、そのコミットでHEADがを止める
squash コミットの内容は利用するが、直前のコミットに内容を融合する
fixup squashに似ているが,コミットメッセージを放棄する
exec シェルを使ってコマンドを実行
コミットの行を消す 該当のコミットを消す
コミットの行を入れ替える コミットの順番を入れ替える

リモートリポジトリの変更の同期

リモートリポジトリから全てのブランチの更新履歴をリモート追跡ブランチに取り込む

$ git fetch <remote>

リモート追跡ブランチを指定ブランチに統合

$ git merge <remote_torack_brancch> <branch>

リモートリポジトリが .git/config に指定されている場合、現在のブランチのリモートの履歴を更新

$ git push

<refspec>として指定した名前をローカルリポジトリから探し、指定したリモートリポジトリの同名の参照を更新

※ブランチ名を指定した場合、ブランチ名を含む参照をローカルリポジトリから検索し、リモートリポジトリをの同名の参照を更新

$ git push <remote_repository> <refspec>

リモートブランチの更新履歴をリモート追跡ブランチに取り込み、リモート追跡ブランチを現在のブランチにマージ

$ git push <remote_repository>

その他

ワーキングディレクトリから圧縮ファイルを作成

$ git archive --format=zip HEAD -o backup.zip

グラフィカル標示

$ git --graph --decorate --oneline