【git】基本コマンド

もくじ

git init コマンド

「.git」というリポジトリを構成するディレクトリが作成されます。

$ git init

git statusコマンド

$ git status

gitで管理しているファイルの変更・追加した状態のファイルや、インデックスという領域に反映されている状態(ステージング)のファイルを確認することができます。

addされたファイルが緑色、まだaddされていないファイルが赤色で表示されます。

git diffコマンド

変更内容を表示する。

$ git diff

VSCodeなどを使っている場合使う頻度は低いと思いますが、ターミナルでも差分を確認できます。

git add コマンド

$ git add . // すべてのファイル・ディレクトリ
$ git add -u // 変更されたファイルを追加する

addする時はファイルのあるディレクトリにいるか確認しておきましょう。カレントディレクトリ配下のファイルが対象になります。カレントディレクトリ関係なくステージングしたい時は-Aオプションで可能です。

git add -A // 作業ツリーすべての変更をステージング

空のディレクトリをaddしたい

また、git addは空のフォルダは追加してくれません。フォルダのみを追加したい場合は.gitkeepファイルを保管しておく必要があります。

addする前に以下を実行しておきます。

cd フォルダ名 // 空のフォルダに移動
touch .gitkeep // キープ用の隠しファイル作成

git rm コマンド

$ git rm --cached

一番最初のgit addを取り消します。

gitレポジトリを作成した直後、一番最初に実行したgit addを取り消したい場合、まだHEADの参照が存在しないため、後述のgit resetを使った取消方法が利用できません。 ステージングを取り消すだけなら--cachedオプションは必ずつけましょう。

git reset コマンド

git 管理上の状態をもとに戻すコマンドです。

$ git reset // 直近のコミットの取り消し
$ git reset --soft HEAD^ // 直近のcommitの取り消し
$ git reset --mixed HEAD^ // 直近のaddとcommitの取り消し
$ git reset HEAD^ // 同上。 --mixed はデフォルトオプション
$ git reset --hard HEAD^ // add, commit に加えて作業中のファイルも元に戻す
$ git reset コミットID // コミットIDを指定して取消

注意点として、--hard危険なコマンドと覚えておきましょう。

コミットしていないファイルが残っている状態でresetを実行すると、前回のコミット以降の修正は消えてしいます。これは、--hardオプションによって作業ディレクトリの内容を強制的に上書きされてしまうからです。

オプションによる対象

オプション HEAD Index Working Directory
--soft
--mixed
(default)
--hard
  • HEAD:最新コミットの状態

  • Index:ステージングされている状態

  • Working Directory:作業している状態

表の通り、resetすると対象の部分がもとに戻ります。例えば、--softオプションをつけるとHEAD(commit)の位置がもとに戻り取り消されます。オプションなしであれば、コミットとステージングがもとに戻ります。

git commit コマンド

$ git commit -m "コメント" // コメントのつけてコミット

コミットを取り消す場合はresetします。くわしくは前項。

git reset --soft HEAD^ // 直前のコミットをインデックスに戻す

コミットメッセージを変更したい場合はオプションを指定します。コミット内容は変更されません。

$ git commit --amend -m "変更したいメッセージ"

git remote add コマンド

リモートにアップロードするためのリモートのURLを登録する

$ git remote add リモート名 URL

仮に以下のように実行します。

$ git remote add origin https://www.sample.com

これで、コマンドラインにURLを全部打ち込むかわりにoriginという文字列を指定するだけでpushなどができるようになります。

git push コマンド

$ git push origin master  // コミットしたファイルをリモートファイルへ更新

masterの部分はブランチを移動している場合そのブランチ名を打ちます。
例えば、testという名前のブランチの場合↓

$ git push origin test

git revert コマンド

$ git revert 
& git revert HEAD // 上と同義
& git revert コミットID // 特定のコミットを取り消す

間違ってコミットしてしまったときに、revert コマンドを実行すれば打ち消し(上書き)ができます。

間違ったコミットがなくなるわけではなく、元に戻した変更のコミットを新しく作成する、というコマンドです。バージョン管理上ではコミットが増えるだけで通常のコミットと変わりません。そのため元に戻ることも可能です。

git branch コマンド

$ git branch // ローカルブランチの一覧
$ git branch ブランチ名  //ブランチの作成
$ git branch -d ブランチ名  // ブランチの削除
$ git branch -D ブランチ名  // ブランチの強制的削除
$ git branch -m ブランチ名  // 現在のブランチ名の変更
$ git branch -a // リモートとローカルのブランチの一覧
$ git branch -r // リモートブランチの一覧

git checkout コマンド

$ git checkout ブランチ名  // ブランチの移動
$ git checkout -b ブランチ名 // ブランチを新規作成し、そこに移動する
$ git checkout -b ローカルブランチ名 origin/リモートブランチ名
$ git checkout -t origin/リモートブランチ名 // ローカルにないリモートのブランチを作成し取り込む

3つ目のコマンドは、マージリクエストはしているがまだリモートのmasterにマージされていないブランチをローカルに落としたいときに使用します。マージ前の他人の作業ブランチを確認するときや、自分の作業したマージリクエストのブランチを別のPCで自ら作業したいときなどにも役立ちます。

オプション-t(追記 ’22 06月)

$ git checkout -t origin/リモートブランチ名
// origin
main
├── branch_A
├── branch_B
└── branch_C

// local
main
├── branch_A
└── branch_B

たとえば、上記のように各ブランチが存在するとしたとき、ローカルではリモートのbranch_Cは存在しません。
branch_Cをローカルに取り込んで作業したい場合「ブランチ作成→移動→取り込み」の一連の作業が発生しますよね。それを一括でできるのがオプションtです!

複雑にしないためにmainブランチで実行することを推奨します。

$ git checkout -t origin/branch_C

git fetch コマンド

$ git fetch リポジトリ
$ git fetch origin master // リモートのmasterをフェッチ
$ git fetch --all // リモートのすべてのブランチの情報をフェッチ

fetchを行うとリモートリポジトリの最新の履歴の取得だけを行うことができます。マージはされないのでローカルの内容が書き換えられることはありません。 fetchした内容を取り込みたい場合はここからmargeをします。

$ git fetch origin // origin のリモートの情報を取得

git merge コマンド

マスターの内容をブランチに反映できます。

マスターに最新をpullし、その最新を切ったブランチに取り込みたい時に使います。

$ git merge origin/master

git pull コマンド

リモートリポジトリの内容を取得し、現在のブランチに取り込む。「fetch」と「merge」を同時に行ってくれる。

$ git pull // リモートリポジトリで変更された内容を全て取得し、現在の作業ツリーに反映する
$ git pull origin master // デフォルトブランチの変更内容を取り込む

git clone コマンド

クローンしたいディレクトリで実行

$ git clone [リモートリポジトリパス]

git stash コマンド

変更を待避させる。

$ git stash // 現在の作業を一時的に退避(Gitで追跡しているファイルのみ)
$ git stash save "message" // メッセージを付けて退避
$ git stash -u // 新規ファイル(Gitで追跡していないもの)も含め退避
$ git stash save -u “message” // git stash -u にメッセージを付ける
$ git stash list // 退避の一覧
$ git stash apply stash@{n} // 退避した作業を復元
$ git stash clear // 退避の消去
$ git stash -k // addした変更以外を退避

復元する際は、引数を指定しない場合退避した作業の中で最新の作業を復元します。 またgit stash listで引数を確認しstash@{1}のように引数を指定することによって特定の作業を復元することができます。

git log コマンド

$ git log //コミットのログが見れる

確認したあとは「q」を押すと元に戻れます。

git rebase コマンド

コミット(変更履歴)を整理できるコマンド。コンフリクトを解消したい場合にも用いる。

git rebase ブランチ // このブランチの先にコミットがまとめられます
git rebase -i 派生元コミットID // 派生元(吸収される)コミットを事前に整理する

オプション-iを実行する場合とは、派生元のコミットで変更箇所が重複していた場合コミットごとに毎回コンフリクトするので、それを回避するためコミットを一つにまとめる際に行います。なので、オプション-iを実行しなくて良い場合もあり、実行する場合はrebaseの前段階で実行する方が楽です。

bonoponz.hatenablog.com

git rm コマンド

作業ツリーとインデックスから特定のファイルを削除します。

$ git rm ファイル名orディレクトリ名
$ git rm --cached ファイル名orディレクトリ名 // ステージング解除のみ

--cachedオプションをつけてファイルを残した場合、インデックスのみ削除し、作業ツリーファイルはそのまま残されます。Git管理の対象外にしたい場合はこのあと.gitignoreに追記しておきましょう。

$ git rm ファイル名orディレクト

プロジェクトのGit管理をやめる

$ rm -rf .git/

gitを管理している.gitフォルダを削除するだけでOKです。

参考URL

【Git】基本コマンド - Qiita

【 git pull 】コマンド――リモートリポジトリの変更内容を取り込む:Linux基本コマンドTips(382) - @IT

  • git rm コマンド

git add の取り消し方法と、関連コマンドまとめ | WWWクリエイターズ

  • git rebase コマンド

git rebaseを初めて使った際のまとめ - Qiita

  • git fetch コマンド

https://yu8mada.com/2018/06/07/how-to-use-git-s-fetch-command/

  • git revert コマンド & git reset コマンド

git commit を取り消して元に戻す方法、徹底まとめ | WWWクリエイターズ

  • git reset コマンド

Git - リセットコマンド詳説