🎃

【Git】個人的な基本操作リスト

2024/02/29に公開

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 brame <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 fetchgit 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