記事内容
よく使用する git コマンドを備忘録も兼ねてまとめてみました。
git status
変更内容の確認するためのコマンド
git status
git diff
変更したファイルの差分を確認するためのコマンド
# add 前の変更を確認する場合
git diff
# add 後の変更を確認する場合
git diff --staged
# ローカルの developブランチと元となるリモートブランチの差分を確認する場合
git diff origin/develop
# ローカルの developブランチとリモートの masterブランチの差分を確認する場合
git diff develop origin/master
# リモートの developブランチとリモートの masterブランチの差分を確認する場合
git diff origin/develop origin/master
-
git status
との違い- コマンドによって比較対象が異なる。
- 具体的にどのような変更がされたのか確認できる。
git branch
ブランチ一覧を確認するためのコマンド
git branch
# リモートブランチを含んだブランチ一覧を確認する場合
git branch -a
ブランチ名の変更
git branch -m (旧ブランチ名) (新ブランチ名)
# 現在作業しているブランチ名を変更する場合
git branch -m (新ブランチ名)
ローカルブランチの削除
git branch -d (ブランチ名)
# 強制削除する場合
$ git branch -D (ブランチ名)
リモートブランチの削除
git push --delete origin (ブランチ名)
共同開発等で他のメンバーと共有している場合は注意が必要です。
git switch
ブランチを切り替えるためのコマンド
git switch (ブランチ名)
ブランチを新規作成し、作成したブランチに切り替える場合
git switch -c (ブランチ名) (ローカルに反映したいリモートブランチ名)
# 例) git switch -c dev origin/dev
リモートブランチをローカルブランチに反映する場合
git switch -c (ローカルブランチ名)
git stash
変更内容を一時退避させるためのコマンド
git stash push -m (メッセージ)
# 実行例
git stash push -m stashで変更内容を退避!
git commit とは違い、メッセージは クォーテーション「 "" 」で囲うとエラーになります。
退避させたスタッシュ一覧を確認する場合
git stash list
# 出力結果
stash@{0}: ...
stash@{1}: ...
現在作業しているブランチに退避させたスタッシュの内容を統合する場合
# 統合後もスタッシュを削除したくない場合
git stash apply stash@{スタッシュ番号}
# 統合後、スタッシュを削除する場合
git stash pop stash@{スタッシュ番号}
退避させたスタッシュを削除する場合
git stash drop stash@{スタッシュ番号}
git add
変更した内容を登録するためのコマンド
git add (ファイル名)
# 全てのファイルを追加する場合
git add .
git commit
git add
で登録した変更内容をローカルリポジトリに登録(コミット)するためのコマンド
メッセージには、変更内容が分かる文言を記述します。
git commit -m "メッセージ"
add と commit を一括で行う場合
git commit -am "メッセージ"
異なるロジックの変更内容が存在する場合は、オススメできない方法です。
直前のコミットを変更する場合(コミットメッセージのみ変更可)
git commit --amend -m "メッセージ"
git push
リモートリポジトリの履歴を更新するためのコマンド
git push origin HEAD
# 下記とやっていることは一緒
git push origin (現在作業しているブランチ名)
HEAD
は、今現在作業しているブランチを指しています。
git fetch
リモートリポジトリの履歴を取得するためのコマンド
共同開発など他のメンバーの変更内容をローカルで参照したい時に使用します。
# 全ての履歴を取得したい場合
git fetch
# 特定ブランチのみ取得したい場合
git fetch (リモートリポジトリ名) (リモートブランチ名)
# 例) リモートリポジトリにある remoteブランチの履歴のみ取得したい場合
git fetch origin remote
git merge
他ブランチの履歴を現在作業しているブランチに統合するためのコマンド
git merge (ブランチ名)
マージする前の状態に戻す場合(※コンフリクトの編集をしていないときに限る)
git merge --abort
git pull
リモートリポジトリの更新内容を取得し、現在作業しているブランチに統合するためのコマンド
先ほど紹介したgit fetch
とgit merge
を同時に実行するコマンドという認識でOKです。
git pull (リモートリポジトリ名) (リモートブランチ名)
# 例) リモートリポジトリの remoteブランチを現在作業しているブランチに統合する場合
git pull origin remote
# 上記を fetchコマンドと mergeコマンドで実行した場合
git fetch origin remote
git merge origin/remote
コミット履歴を枝分かれさせたくない場合
git pull --rebase (リモートリポジトリ名) (リモートブランチ名)
参考記事 ↓
git pull
を取り消したい場合
# git pull したブランチが、現在作業しているブランチにマージされた場合(かつ直前の状態に戻す場合)
git reset --hard HEAD@{1}
# マージが失敗(コンフリクト)した場合の取り消し方法
git merge --abort
git reset
push
したコミットを取り消すためのコマンド
# 直前のコミットだけ取り消す場合
git reset --soft HEAD^
# 直前のコミットと変更内容も一緒に取り消す場合
git reset --hard HEAD^
# 2つ前のコミットと変更内容も一緒に取り消す場合
git reset --hard HEAD~2
git reset
で取り消したコミットを復元する方法
# HEADが指しているコミット履歴を確認
git reflog
# 出力内容
71f4da2 (HEAD -> master) HEAD@{0}: reset: moving to HEAD~1
53f1se1 HEAD@{1}: xxxxx... # ← このコミットを復元したい
# 取り消したコミットの直前に戻す
git reset --hard HEAD@{1}
# もしくは ⬇️
git reset --hard ORIG_HEAD
# 再度、HEADが指しているコミット履歴を確認
git reflog
# 出力内容( reset で取り消したコミットを取り消して復元)
53f1se1 HEAD@{0}: xxxxx...
git revert
特定のコミットを元に戻すコマンド
- 指定したコミット以降に行なわれた処理を全て戻すわけではない
マージコミットを取り消す場合
マージした二つのコミット(親)の内、どちらに戻すかを指定する必要がある。
# マージコミットの有無を確認
git cat-file -p { commit_id }
# 下記のようにparentが2つあればマージコミット
tree f1cabb208445a0cd15cb29f15b805100851f8dcb
parent b9466577c0c19af5605be40a4af90cfa37bdaf10
parent 84a1988999654e186f1ac42942befcaa2ce730ae
author xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
committer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# 特定のコミットを取り消す
git revert { commit_id }
# マージコミットを取り消す場合
git revert -m 1 { commit_id }
git rebase
指定したコミットを作り直して、ログを掃除するためのコマンド
3つ前のコミットを修正する場合
1. コミット履歴を確認
$ git log --oneline --graph
* e52c85bcb8 (HEAD -> branch_name) テスト
* 1af223d5f6 フロント側の実装
* 05c9b42463 バック側の実装
* ...
2. 修正したいコミットを選択
git rebase -i HEAD~3 # 3つ前のコミット
3. テキストエディタが開き、1行目のpick
の文字をedit
に変更して保存・終了
- 終了すると、修正するコミットがチェックアウトされた状態になる
edit 05c9b42463 バック側の実装 # pick => editに修正
pick 1af223d5f6 フロント側の実装
pick e52c85bcb8 テスト
4. ファイルを修正し、ステージングに上げてから修正内容を保存
commit --amend
:直前のコミットを修正するためのコマンド
-
使用用途
- コミット後に追加で修正を行いたい
-
git add
し忘れたファイルがある
プッシュ済みのコミットを修正してしまうと、git push -f
を実行する必要があるので共有リポジトリの場合は注意が必要!
git add .
git commit --amend
5. コミットでの作業を終了
commit
しただけだと、まだ修正内容が反映されないので、このコミットでの修正が完了したことを知らせている。
git rebase --continue
上記実行後、他のコミットで競合が発生した場合、競合箇所を修正後に下記コマンドを実行する。
この時、commit
は必要ないので実行不要!
git add .
git rebase --continue
今までの作業を中止する場合
これまでのrebase
での作業を無かった事にしてくれる。
git rebase --abort
rebase
後で元に戻したい場合
rebase前のコミットはORIG_HEADという名前で残っているため、下記コマンドでrebase
前の状態に戻すことができる。
git reset --hard ORIG_HEAD
git cherry-pick
特定のコミットを取り込みコマンド
git cherry-pick commit_id
複数取り込む場合
二つのコミットの間を「..」で繋げる。
git cherry-pick commit_id..commit_id
コミットしたくない場合
-n
オプションを付ける。
git cherry-pick -n commit_id