見出し画像

Git 基本コマンドまとめ

はじめまして、スーパーソフトウェア東京オフィス技術部の金子です。
git操作で困らないために、使用頻度の高い git のコマンドをまとめました。
gitの概念、基本用語、各コマンドの解説は長文化するため控えています。
「ファイル名」と記載されている部分は 「パス+ファイル名」としてお読みください。

目次


コミット操作

特定のファイルの変更をコミット

# 特定のファイルの変更をインデックスに追加
$ git add <ファイル名1> <ファイル名2> ...
# コミット
$ git commit -m "メッセージ"

すべての変更をコミット

# すべての変更をインデックスに追加
$ git add -A
# コミット
$ git commit -m "メッセージ"

コミットをリモートブランチにプッシュ

# 現在のブランチがリモートにない場合、または現在のブランチとは別のブランチをプッシュする場合
$ git push -u origin <ブランチ名>
# 現在のブランチがリモートにある場合
$ git push

コミットの履歴表示

$ git log
# 簡易表示
$ git log --oneline

特定のコミットにリセット
補足
optionは下記の通り。
--hard: 特定のコミット以降の変更を残さない。
--soft: 特定のコミット以降の変更をインデックスに残す。ワーキングツリーはそのまま。
--mixed: 特定のコミット以降の変更をワーキングツリーに残す。

$ git reset --hard <コミットハッシュ>

特定のコミットへの移動

# 特定のコミットに移動
$ git checkout <コミットハッシュ>
# 最新のコミットに戻る
$ git checkout <ブランチ名>

特定のコミットを差し戻す
補足
不要なコミットをリモートブランチにプッシュした場合などに使用する。

$ git revert <コミットハッシュ>

直近のコミットメッセージの修正

$ git commit --amend -m "修正メッセージ"

過去のコミットメッセージの修正

# 修正したいコミットの1つ前のコミットハッシュを指定する
$ git rebase -i <コミットハッシュ>

# ------------テキストエディタの操作に移る------------
# 以下のように表示される
pick <コミットハッシュ> コミットメッセージ1
# vimの場合「i」で入力モードにして、先頭をeditに修正する
edit <コミットハッシュ> コミットメッセージ1
# vimの場合「esc」でノーマルモードにして、「:wq」で上書きして終了
# ------------テキストエディタの操作の終了------------

$ git commit --amend -m "修正メッセージ"
# リベースの完了
$ git rebase --continue

強制プッシュ(リモートブランチの履歴をローカルブランチの履歴と同様にする)
補足
--force-with-lease: ローカルとリモートを比較し、ローカルが最新の場合のみプッシュを許可。

$ git push --force-with-lease origin <ブランチ名>

複数のコミットを1つにまとめる
補足
squah (sでも可) を指定したコミットは前(上の) pick と指定したコミットに集約される。

# 直近3つのコミットを1つのコミットにまとめる場合
git rebase -i HEAD~3

# ------------テキストエディタの操作に移る------------
# 以下のように表示される
pick <コミットハッシュ1> コミットメッセージ1
pick <コミットハッシュ2> コミットメッセージ2
pick <コミットハッシュ3> コミットメッセージ3
# vimの場合「i」で入力モードにして、直近2つのコミットをsquash(sでも可)に修正する
pick <コミットハッシュ1> コミットメッセージ1
squash <コミットハッシュ2> コミットメッセージ2
squash <コミットハッシュ3> コミットメッセージ3
# vimの場合「esc」でノーマルモードにして、「:wq」で上書きして終了

# ------------コミットメッセージの編集の開始-----------
# This is a combination of 3 commits.
# The first commit's message is:
コミットメッセージ 1

# This is the 2nd commit message:

コミットメッセージ 2

# This is the 3rd commit message:

コミットメッセージ 3

# 以下のような感じで編集する
# This is a combination of 3 commits.
# The first commit's message is:
修正コミットメッセージ

# This is the 2nd commit message:

# This is the 3rd commit message:
# ------------コミットメッセージの編集の終了-----------

# ------------テキストエディタの操作の終了------------

他のブランチのコミットを取り込む

# 他のブランチのコミット履歴を調べる
$ git log <他のブランチ名>
# 取り込みたいコミットをコミットハッシュで指定して取り込む
$ git cherry-pick <コミットハッシュ>
# 連続したコミットを取り込みたい場合
$ git cherry-pick <始点の1つ前のコミットハッシュ>..<終点のコミットハッシュ>

ブランチ操作

ブランチの変更

$ git switch <ブランチ名>

ブランチを作成して、作成したブランチに変更する

$ git switch -c <ブランチ名>

リモートのブランチの状態をローカルで追跡できるようにする

$ git fetch

プル(リモートブランチの変更を取り込む)

$ git pull

ローカルにないリモートのブランチをローカルに取り込む

$ git checkout -b <ブランチ名> <origin/ブランチ名>

# switchを使いたい場合
$ git fetch 
$ git branch -r
# origin はつけない
$ git switch <リモートブランチ名>

ブランチの一覧表示

# ローカルのブランチを一覧表示
$ git branch
# リモートのブランチを含めて一覧表示
$ git branch -a
# リモートブランチのみ一覧表示
$ git branch -r

ブランチの削除

# 削除対象ではないブランチに変更
$ git switch <削除対象ではないブランチ名>
# -D で強制削除
$ git branch -d <ブランチ名>

ブランチ名変更
補足
ブランチを既にリモートに上げてしまっている場合、プッシュ時にリモートでは新しいブランチとして認識される。

$ git branch -m <ブランチ名>

リベース(派生元ブランチの派生元コミットを変更する)
補足
派生先ブランチで派生元ブランチの変更を取り込みたい時や、過去のコミットから派生させたい時などに使用する。
ブランチをリモートにプッシュしている場合は、リモートブランチを書き換る必要が生じてしまうため、マージを使用する!

$ git switch <派生元ブランチ>
# 派生元ブランチを最新の状態にする
$ git pull
$ git switch <派生先ブランチ>
# 派生元ブランチの最新コミットから派生させる
$ git rebase <派生元ブランチ>

派生元ブランチの変更

$ git rebase --onto <新しい親ブランチ名> <間違えた親ブランチ名> <派生先ブランチ>

リベースの完了

$ git rebase --continue

リベースの中止

$ git rebase --abort

マージ(他のブランチの変更を取り込む)
補足
競合が発生した際はエディタなどで解消する。
競合を解決したら git add <ファイル名> で解決したことをgitに知らせる。

$ git switch <マージ先のブランチ名>
$ git merge <マージ元のブランチ名>

マージの中止

# コンフリクトを解消する際に、何も編集していない場合
$ git merge --abort
# コンフリクトを解消する際に、編集をしている場合
$ git reset --hard HEAD

変更の確認

他のブランチとの差分の表示

# ローカルにある他のブランチとの差分比較
$ git diff <他のブランチ名>
# リモートにある他のブランチとの差分比較
$ git diff <origin/他のブランチ名>
# 他のブランチの差分のあるファイルのファイル名のみ表示
$ git diff --name-only <他のブランチ名>
# 他のブランチの特定のファイルの差分を表示
$ git diff <他のブランチ名> -- <ファイル名>

現在の変更を確認

# インデックスの変更を確認
$ git diff --cached
# ワーキングツリーの変更を確認
$ git diff

変更されたファイルの確認
補足
コマンド実行時の表示内容は下記の通り。
Changes to be committed: インデックスにあるファイルを表示。
Changes not staged for commit: ワーキングツリーにあるファイルを表示。
Untracked files: 未追跡のファイルを表示。

$ git status
# 簡易表示
$ git status -s

特定のファイルの特定の行が誰によって変更されたのかを確認する

$ git blame <ファイル名>

変更の操作

スタッシュに退避(変更の一時的な退避)

# スタッシュにメッセージをつけない場合
$ git stash
# スタッシュにメッセージをつけたい場合
$ git stash save "メッセージ"
# 未追跡ファイルも含めたい場合
$ git stash -u

スタッシュの一覧表示

$ git stash list

特定のスタッシュを適用する

# 適用後、適用したスタッシュを削除しない
$ git stash apply stash@{スタッシュ番号}
# 適用後、適用したスタッシュを削除する
$ git stash pop stash@{スタッシュ番号}

スタッシュを削除する

$ git stash drop stash@{スタッシュ番号}
# スタッシュをすべて削除する
$ git stash clear

インデックス、ワーキングツリーから変更を取り消す

$ git reset --hard

ワーキングツリーの変更を取り消す

$ git checkout -- ファイル名
# すべての変更を取り消す
$ git checkout -- .

インデックスの変更を取り消す(ワーキングツリーに変更を残す)

# 特定のファイルの変更を取り消す
$ git reset HEAD ファイル名
# すべての変更を取り消す
$ git reset HEAD

特定のファイルを未追跡にする

$ git rm --cached <ファイル名>

▼採用情報

▼新卒情報はWantedlyで

この記事が気に入ったらサポートをしてみませんか?