【Git】個人的な基本操作リスト
add
git add <File Name>
指定したファイルの変更をステージングする。
git add <File Name>
git add .
検出されている変更をすべてステージングする。
git add .
git add -p(git add -patch)
Hunk(各変更の塊)ごとにステージングすることができる。コマンドの後にファイル名を追加するとそのファイルのみが対象となる。
詳細はこちら
2つのファイルに変更が施され、各ファイルのHunkが3つずつの場合を想定する。
最初に1/3と表示されるが、それは1つ目のファイルの1つ目のHunkを表す。1つ目のファイルの3つ目のHunkの操作が終わったら再度1/3と表示されるが、それは2つ目のファイルの1つ目Hunkを表す。
Hunkの操作に関しては、「y」でステージングを行い、「n」で何も行わずに次のHunkの操作に進む。Hunkが大きい場合は「s」で基本的に分割できるが、「s」の選択肢がない場合は「e」で手動で編集できる。選択肢の「q」で終了することができる。
手動で編集を行う場合の基本操作は以下の通り。
「+」の行をステージングしたくない場合は行を削除し、「-」の行をステージングしたくない場合は「-」を半角スペースに置き換える。
git add -p
git add -patch
git blame
git blame <File Name>
指定したファイルがどのコミットによって変更されたかなどの情報を表示する。(コミットハッシュ、開発者、日付など)
git blame <File Name>
git branch
git branch
ローカルリポジトリのブランチ一覧を表示する。
git branch
git branch -m <New Branch Name>
現在のブランチ名を新しいブランチ名に変更する。
git branch -m <New Branch Name>
git branch -m <Old Branch Name> <New Branch Name>
指定したブランチを新しいブランチ名に変更する。
git branch -m <Old Branch Name> <New Branch Name>
git branch -d <Branch Name>
指定したブランチを削除する。(マージされていないブランチなどの削除はできない。)
git branch -d <Branch Name>
git branch -D <Branch Name>
指定したブランチを削除する。(マージされていないブランチなどでも強制的に削除する。)
git branch -D <Branch Name>
git branch -vv
各ローカルブランチに関する詳細情報が表示する。現在のブランチにupstreamが設定されているかなどを確認できる。「vv」は「very verbose(非常に詳細)」を意味するらしい。
git branch -vv
git clone
git clone <Remote Repository URL>
リモートリポジトリをクローンする。
git clone <Remote Repository URL>
git clone --depth <Number Of Commits> <Remote Repository URL>
リモートリポジトリをクローンする。その際に、コミット履歴の指定された深さまでのコミットを取得する。以下の例では最新のコミットのみ取得する。
git clone --depth 1 <Remote Repository URL>
git clone <Branch Name> <Remote Repository URL>
リモートリポジトリをクローンする。その際に、指定されたブランチのみをクローンする。
git clone <Branch Name> <Remote Repository URL>
git commit
git commit
ステージング済みの変更をコミットする。コマンド実行後vimが開かれるので、コミットメッセージを入力する。
git commit
git commit -m <Commit Message>
メッセージ付きでコミットを行う。(vimは開かれない。)
git commit -m <Message>
git commit -a -m <Commit Message>(git commit -am <Commit Message>)
検出されている変更を全てステージングし、入力されたコミットメッセージと共にコミットする。
git commit -a -m <Commit Message>
git commit -am <CommitMessage>
git commit --amend
直前のコミットメッセージを修正する。vimが開かれるのでそこで編集を行う。
git commit --amend
git commit --amend -m <New Commit Message>
直前のコミットメッセージを入力されたコミットメッセージに修正する。
git commit --amend -m <New Commit Message>
git commit --amend --no-edit
変更内容を直前のコミットに含める。コミットメッセージの編集は行わない。
git commit --amend --no-edit
git commit -a --amend --no-edit
変更内容をステージングし、それを直前のコミットに含める。 コミットメッセージの編集は行わない。
git commit -a --amend --no-edit
git checkout
git checkout -b <Branch Name>
現在のコミットから新規ブランチを作成し、チェックアウトする。
git checkout -b <Branch Name>
git checkout <Commit> -b <New Branch Name>
指定したコミットで新規ブランチを作成し、チェックアウトする。コミットハッシュやHEAD^
を用いてコミットを指定できる。git switch <Commit> -c <Branch Name>
と同じ働きをする。
git checkout <Commit> -b <New Branch Name>
git checkout -
前回チェックアウトされていたブランチをチェックアウトする。
git checkout -
git checkout HEAD^ & git checkout HEAD~
HEADのひとつ前のコミットをチェックアウトする。^
と~
は同じものではないことに注意。
git checkout HEAD^
git checkout HEAD~
git cherry-pick <Commit Hash>
指定したコミットの変更内容を取り込む。(同じコミットが現在のブランチであったことにするような感じ。)
git cherry-pick <Commit Hash>
git cherry-pick <Commit>...
指定した複数コミットの変更内容を取り込む。書いた順にチェリーピックが行われる。
git cherry-pick <Commit1> <Commit2> <Commit3>
git diff
git diff
ステージングされていない変更を表示する。後ろにファイル名をつけることでそのファイルのステージングされていない変更のみを表示できる。
git diff
git diff --staged & git diff --cached
ステージングされている変更を表示する。
後ろにファイル名をつけることでそのファイルのステージングされている変更のみを表示できる。
git diff --staged
git diff --cached
git diff HEAD
現在のワーキングディレクトリの状態と最新のコミット(HEAD が指すコミット)の状態との間の差分を表示する。
git diff HEAD
git diff <Commit Hash>
現在のワーキングディレクトリの状態と指定したコミットの状態との差分を表示する。
git diff <Commit Hash>
git diff <Commit Hash> <Commit Hash>
2つのコミットの差分を表示する。
git diff <Commit Hash> <Commit Hash>
git fetch
git fetch
設定されているリモートリポジトリの情報を取得し、リモート追跡ブランチを更新する。
git fetch
git fetch -p(git fetch --prune)
設定されているリモートリポジトリの情報を取得し、リモート追跡ブランチを更新する。その際にリモートリポジトリで削除されているブランチの追跡ブランチの削除も行う。
git fetch -p(git fetch --prune)
git init
git init
現在のディレクトリでGitによるバージョン管理を開始する。
git init
git init <Directory Name>
カレントディレクトリに新規ディレクトリを作成し、Gitによるバージョン管理を開始する。
git init <Directory Name>
git log
git log
コミット履歴を表示する。
git log
git log --oneline
コミット履歴を各コミット一行で表示する。
git log --oneline
git log --graph
コミット履歴をグラフ付きで表示する。
git log --graph
git log -p(git log --patch)
変更内容(patch)を含むコミット履歴を表示する。コマンドの最後にファイルを指定することで、そのファイルのpatchのみを確認できる。
git log -p
git log --patch
git merge
git merge <Branch Name>
現在のブランチに指定したブランチをマージする。
git merge <Branch Name>
git merge --no-ff <Branch Name>
現在のブランチに指定したブランチをFast-forwordせずにマージする。(マージコミットが作成される。)
git merge --no-ff <Branch Name>
git merge-base <Branch Name> main
2つのブランチの分岐点(祖先コミットの内の最新コミット)を調べることができる。以下の例では指定したブランチとmainブランチの分岐点(祖先コミット)を調べている。
git merge-base <Branch Name> main
git pull
git pull
設定されているリモートリポジトリから最新の変更を取得し、ローカルブランチに統合する。git fetch
とgit merge
が行われている。
git pull
git pull -p(git pull --prune)
設定されているリモートリポジトリから最新の変更を取得し、ローカルブランチに統合する。その際にリモートリポジトリで削除されているブランチの追跡ブランチの削除も行う。
git pull -p(git pull --prune)
git push
git push
現在のブランチの変更をリモートブランチにプッシュする。upstreamが設定されていない場合は失敗する。
git push
git push origin HEAD
現在のブランチをプッシュする。リモートリポジトリにはプッシュしたブランチと同じ名前のブランチが作成される。
git push origin HEAD
git push -u origin HEAD(git push --setupstream origin HEAD)
現在のブランチのupstreamを設定しプッシュする。リモートリポジトリにはプッシュしたブランチと同じ名前のブランチが作成される。
git push -u origin HEAD
git push --setupstream origin HEAD
git push --tags
設定されているリモートブランチにローカルリポジトリに存在するすべてのタグをプッシュする。(通常git push
でタグは含まれない。)
git push --tags
git push origin --delete <Remote Branch Name> & git push origin :<Remote Branch Name>
指定したリモートブランチを削除する。追跡ブランチも削除される。
git push origin --delete <Remote Branch Name>
git push origin :<Remote Branch Name>
git rebase
git rebase <Branch Name>
現在のブランチの起点を指定したブランチに移動する。(同じ作業内容のコミットが指定したブランチに現れる感じ。そのため、コミットハッシュは異なる。)
ここでgit rebase main
を実行することでdev1の起点をmainに変更することができる。(dev1をチェックアウトしていない場合はgit rebase main dev1
を実行する。)
git rebase <Branch Name>
git rebase --onto main branch1 branch2
branch1のプルリクエストの承認待ちの間に、branch1の変更内容に依存するbranch2ブランチで作業を行ったと想定する。その後、branch1のプルリクエストが承認され、mainブランチにマージされた。
git rebase --onto main branch1 branch2
を実行することで、branch2の起点を変更することができる。
git rebase --onto main branch1 branch2
git rebase -i <Commit>
指定したコミットより後のコミットのsquash,fixupを行うことができる。(コミットをまとめられる。)
git rebase -i <Commit>
git reflog
git reflog
Gitの操作で変更されたリポジトリの状態の履歴を表示する。
git reflog
// サンプル
1a2b3c4 HEAD@{0}: commit: 新しいコミットメッセージ
2b3c4d5 HEAD@{1}: merge feature-branch: Fast-forward
3c4d5e6 HEAD@{2}: checkout: moving from feature-branch to main
git remote
git remote add <Remote Repository Name> <Remote Repository URL>
リモートリポジトリを指定した名前で設定する。通常はorigin
とする。
git remote add origin https://github.com/user/repo.git
git reset
git reset --hard
検出されている変更を全て取り消す。その際にステージング済みか否かは関係なく、全ての変更を取り消す。
git reset --hard
git reset -p(git reset --patch)
Hunk(各変更の塊)ごとにアンステージングすることができる。コマンドの後にファイル名を追加するとそのファイルのみが対象となる。(git add -p
と同じ感じ。)
git reset -p
git reset --patch
git reset --hard <Commit>
現在のブランチのHEADを指定したコミットまで戻す。指定したコミットより後のコミットは破棄される。
git reset <Commit Hash> --hard
git reset --hard HEAD^
現在のコミットの一つ前のコミットに戻る。戻った後のコミットより後の変更は全て破棄される。ハットの数を増やせばその分だけ戻る。
git reset HEAD^ —hard
git reset --hard ORIG_HEAD
誤ってgit reset --hard HEAD^^^
などをしてしまった場合、元に戻せる。(コミットされていない変更に関しては戻らない。)
git reset --hard ORIG_HEAD
git reset --hard HEAD@{5}
git reflog
で取得して履歴の状態に戻ることができる。
git reset --hard HEAD@{5}
git reset options
git restore
git restore <File Name>
指定したファイルを直前のコミットの状態に復元する。(破壊的操作を伴う。)
git restore <File Name>
git restore --staged <File Name>
指定したファイルのステージングされている変更をアンステージングする。
git restore --staged <File Name>
git revert
git revert <Commit Hash>
指定したコミットと逆の作業を行い、変更を打ち消す。コミットの指定はHEADやコミットハッシュを用いる。
git revert <Commit>
git stash
git stash list
スタッシュのリストを表示する。
git stash list
git stash
検出されている変更を隔離する。ステージング済みか否かは関係なく、全ての変更を隔離する。
git stash -u
git stash -u
検出されている変更と未追跡ファイルを隔離する。ステージング済みか否かは関係なく、全ての変更を隔離する。
git stash -u
git stash apply
最新のスタッシュを反映する。スタッシュリストからは削除されない。その際、以前ステージングされていたとしても、全ての変更はアンステージングの状態となる。
git stash apply
git stash pop
最新のスタッシュを反映する。スタッシュリストからは削除される。その際、以前ステージングされていたとしても、全ての変更はアンステージングの状態となる。
git stash pop
git stash drop
最新のスタッシュを削除する。
git stash drop
git stash drop stash@{10}
11番目のスタッシュを削除する。(スタッシュの番号は0から振られていくため。)
git stash drop stash@{10}
git stash clear
全てのスタッシュを削除する。
git stash clear
git stash branch <New Branch Name>
新規ブランチを作成し、最新のスタッシュを反映する。スタッシュリストからは削除される。その際、以前ステージングされていたとしても、全ての変更はアンステージングの状態となる。
git stash branch <New Branch Name>
git status
git status
Gitリポジトリの現在の状態を表示する。
git status
git switch
git switch <Branch Name>
指定したブランチをチェックアウトする。
git switch <Branch Name>
git switch -c <Branch Name>
新規ブランチを作成し、チェックアウトする。
git switch -c <Branch Name>
git switch <Commit> -c <Branch Name>
指定したコミットで新規ブランチを作成し、チェックアウトする。コミットハッシュやHEAD^
を用いてコミットを指定できる。git checkout <Commit> -b <New Branch Name>
と同じ働きをする。
git switch <Commit> -c <Branch Name>
git switch -
前回チェックアウトされていたブランチをチェックアウトする。
git switch -
Discussion