まだまだGitに慣れず、後で参照できるように、目的別にコマンドや、やり方等をまとめることにしました。
目的一覧は「目次」から、扱ったコマンドの一部を最後の「まとめ」で表にしています。
使用した環境
WSL2 - Ubuntu 20.04 LTS
git version 2.35.1
初期化
空のリポジトリを作成する
git init ディレクトリのパス
対象のディレクトリ内に空のリポジトリを作成します。
初期化すると私のバージョンでは以下のようなヒントメッセージが出ました。
$ git init .
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
Initialized empty Git repository in /home/user/testdir/.git/
デフォルトブランチ名が「master」のままだと、毎回この文が出るみたいですね。
人種差別に関連した流れのようです。
IT用語も「奴隷」廃止の動き 「slave」は「フォロワー」や「レプリカ」に[ITmedia]
ヒントによると、「master」の代わりに「main」、「trunk」、「development」がよく使われる、と書かれています。
せっかくなので「main」に変更しておきます。
$ git config --global init.defaultBranch main
またオプションに「--bare」をつけると、ワークツリーを持たないリポジトリとして初期化することができます。
git init --bare ディレクトリのパス
私はGitHubの代わりとしてローカルで実行し、練習に使っていました。
$ pwd
/home/user/backup
$ git init --bare .
Initialized empty Git repository in /home/user/backup/
$ cd ../testgit
$ git remote add backup /home/user/backup
$ git push backup main
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 6 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 463 bytes | 463.00 KiB/s, done.
Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
To /home/user/backup
* [new branch] main -> main
$ git remote
backup
リモートリポジトリからコピー
git clone リポジトリのURLやパス
現在のディレクトリ内に新しいディレクトリを作成し、そこにリモートリポジトリからコピーを行います。
$ git clone https://github.com/fujinov/github_test.git
Cloning into 'github_test'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0
Receiving objects: 100% (6/6), done.
上記の場合だと「github_test」というディレクトリが作成されます。
リポジトリのパスの後にディレクトリを指定すると、新しいディレクトリは作成されずそこにコピーが行われます。
リモートリポジトリにはデフォルトで「origin」という名前が付けられますが、別名をつけるにはオプション「-o」を使います。
確認
変更があるか確認する
git status
ワークツリーとステージ間、ステージとコミット間を比較し、現在の状態を表示します。
$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: test.txt
オプション「-s」をつけると簡易表示。
差分を表示
git diff
ステージに追加していなくて変更されているファイルの差分を表示。
$ git diff
diff --git a/topic.txt b/topic.txt
index a1d5bcb..b7a5038 100644
--- a/topic.txt
+++ b/topic.txt
@@ -1 +1,2 @@
-topicブランチで作成
\ No newline at end of file
+topicブランチで作成
+これが変更点
git diff --cached
ステージされているファイルと直近のコミットを比較して差分表示。
「--staged」でも可。
git diff コミットID..コミットID
git diff ブランチ名..ブランチ名
コミット間の比較とブランチ間の比較。
「1..2」とすると、1を基準として2と比較します。
diffの出力の見方
最初見方がよくわからなくて、結構悩んだので説明しておきます。
$ git diff diff --git a/sample.txt b/sample.txt index 6ee0544..a94a531 100644 --- a/sample.txt +++ b/sample.txt @@ -1,6 +1,6 @@ Unmodified +modified Unmodified +Changed Unmodified -Unmodified -Unmodified -Unmodified +modified
上記は「sample.txt」の変更前と変更後の比較です。変更前のファイルは「-」が、変更後には「+」の記号が付与されます。
「@ -1,6 +1,6 @」は表示するファイルの行数で、変更前のファイルを1行目から6行分、変更後のファイルを1行目から6行分表示する、という意味です。
その下が実際に表示されたファイルの中身です。
最初、プラスが付いているから追加されたもの、マイナスが付いているから削除されたもの、だと勘違いしていました。
プラスのついている行は変更後のファイルの一行、マイナスが変更前のファイルの一行、記号のついていないものは、未変更で共通して存在する行になります。
未変更と変更後を合わせて6行、未変更と変更前を合わせて6行分ありますね。
変更前や変更後、どちらかのファイルをすべて表示してからもう片方を表示する、という仕様にはなっていません。
Unmodified +modified Unmodified +Changed Unmodified -Unmodified -Unmodified -Unmodified +modified
上記を「Visual Studio Code」を使って左右に並べると、次のようになります。

コミット履歴を表示
git log [ファイル名]
すべてのコミット履歴が新しい順で表示されます。
ファイル名をつけるとファイルのコミット履歴。
$ git log
commit 723b175d7313047e31b95bd0f3b8e22ea5de5a29 (HEAD -> main, origin/main)
Author: fujinov <98008144+fujinov@users.noreply.github.com>
Date: Wed Jan 19 15:43:16 2022 +0900
文章追加
commit 400955e929fc0f182706a685f66773bd517ae632
Author: fujinov <98008144+fujinov@users.noreply.github.com>
Date: Wed Jan 19 15:19:16 2022 +0900
index.html追加
オプション
「-p」コミットで反映された変更点を表示。
「-n 数」数の分だけ表示。
「--oneline」一行表示。
「--graph」グラフ表示。
jでログを下にスクロール
kで上にスクロール
qで終了
コミット
次のコミット対象に含める
git add ファイルパス
「git commit -a」では、新規に追加されたファイルはコミット対象に含まれません。
「git add ファイルパス」で明示する必要があります。
コミット作成
git commit
コマンドを実行すると、メッセージ入力のためにテキストエディタが立ち上がります。
オプション
「-m "内容"」エディタを起動させずメッセージを"内容"で登録。
メッセージを囲むのはシングルクォーテーション「'」でも可。
「-a」変更や削除されたファイルをステージに追加してコミット。
「-v」変更箇所を表示してコミット。
$ git commit -m '数値変更'
[main f90814f] 数値変更
1 file changed, 2 insertions(+), 1 deletion(-)
コミットの変更・修正
git commit --amend
直近のコミットのやり直し(メッセージの変更等も)。
※push済みのコミットのやり直しには注意。
git revert コミットID
指定したIDのコミットを打ち消す内容のコミットを新たにします。
ブランチ
origin/main
リモートを追跡するローカルにあるブランチ(リモート追跡ブランチ)
ローカルブランチの上流ブランチとして設定できる。
main
ローカルブランチ
上流ブランチを設定しておくと、データ取得・送信の際にコマンド省略ができて楽。
ブランチ一覧を表示
git branch
$ git branch * main
オプション
「-a」をつけるとリモート追跡ブランチを合わせて表示。
「-r」はリモート追跡ブランチのみ表示。
「-v」最新のコミットIDとメッセージを合わせて表示。
「-vv」『-v』の内容+設定済みの上流ブランチ。
「--merged」でマージ済み。
「--no-merged」で未マージ。
新しいブランチの作成
git branch 名前
「名前」のブランチを作成します。
作成するだけで切り替えはしません。
$ git branch newbranch $ git branch * main newbranch
*のついているものが現在のブランチ。
git switch -c 名前
git checkout -b 名前
新しく「名前」のブランチを作成し、かつそちらに切り替えます。
$ git switch -c neobranch Switched to a new branch 'neobranch' $ git branch main * neobranch newbranch
git switch --orphan 名前
独立した空のブランチを作成します。
ブランチの切り替え
git switch ブランチ名
git checkout ブランチ名
「switch」はgitのバージョン2.23から追加されたコマンドです。
ブランチの切り替えやファイルの復元などを「checkout」コマンドが担っていますが、このコマンドはやれることが多く複雑だったため、「switch」と「restore」を追加して役割を与えたという経緯があります。
$ git switch newbranch
A test2
Switched to branch 'newbranch'
ブランチのリネーム
git branch -m [該当ブランチ] 新しい名前
該当ブランチを省略した場合、現在のブランチがリネームされます。
$ git branch main * neobranch newbranch $ git branch -m renamed $ git branch main newbranch * renamed
ブランチの削除
git branch -d ブランチ名
git branch -D ブランチ名
「-d」はブランチがマージ済みのものであれば削除します。
「-D」は強制的に削除します。
$ git branch -d test
Deleted branch test (was a7c0e81).
リモートのブランチを削除
git push --delete リモート名 ブランチ名
リモートリポジトリのブランチを削除します。
$ git branch -a
* main
test
remotes/origin/HEAD -> origin/main
remotes/origin/main
remotes/origin/test
$ git push --delete origin test
To https://github.com/fujinov/github_test.git
- [deleted] test
リモート追跡ブランチの削除
git remote prune リモート名
git fetch --prune
他の人がリモートリポジトリのブランチを削除すると、自分のローカル環境のリモート追跡ブランチが残ることがあります。
残ったブランチをすべて削除します。
$ git remote prune backup
Pruning backup
URL: /home/user/backup
* [pruned] backup/topic
git branch -r -d ブランチ名
任意のリモート追跡ブランチを削除します。
$ git branch -r -d origin/test
Deleted remote-tracking branch origin/test (was da66ba2).
上流ブランチを設定
git branch -u ブランチ名
現在のブランチの上流として「ブランチ名」を設定します。
$ git branch -u origin/test
Branch 'test' set up to track remote branch 'test' from 'origin'.
リモートリポジトリ
リモートリポジトリの追加
git remote add 名前 リポジトリのパス
名前は管理するために付け、データの取得や反映、またデータ送信に使用します。
デフォルトで付ける名前に「origin」がよく使われるのは、cloneしたときの初期設定が「origin」だから。
$ git remote add origin https://github.com/fujinov/github_test.git
※リモートリポジトリを登録するだけで、データの取得は別途行う必要があります。
リモートリポジトリ表示
git remote
登録されているリモートリポジトリの一覧を表示します。
$ git remote
backup
origin
オプション「-v」でURLを表示。
git remote show リモート名
詳細を表示します。
$ git remote show origin
* remote origin
Fetch URL: https://github.com/fujinov/github_test.git
Push URL: https://github.com/fujinov/github_test.git
HEAD branch: main
Remote branch:
main tracked
Local branch configured for 'git pull':
main merges with remote main
Local ref configured for 'git push':
main pushes to main (up to date)
リネーム・削除・URLの変更
git remote rename リモート名 新しい名前
リモート名を新しい名前に変えます。
$ git remote
backup
$ git remote rename backup copy
$ git remote
copy
git remote rm リモート名
登録しているリモートを削除します。
※リモートリポジトリ自体を削除するわけではありません。
git remote set-url リモート名 新しいURL
リモートのURLを変更します。
リモートからデータを取得
git fetch [リモート名] [ブランチ名]
データを取得します。
リモート名・ブランチ名を省略すると、登録しているすべてのリモートのデータ、ブランチ名を省略すると指定したリモートのすべてのデータを取得。
※リモート追跡ブランチ(origin/mainなど)にデータが反映され、ワークツリーはそのままです。
$ git fetch origin
remote: Enumerating objects: 38, done.
remote: Counting objects: 100% (38/38), done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 38 (delta 12), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (38/38), 2.98 KiB | 381.00 KiB/s, done.
From /home/user/backup
* [new branch] main -> origin/main
git pull リモート名 ブランチ名
取得してワークツリーに反映させます。
pullは「fetch」+「merge」の複合コマンド。
※上流ブランチが設定済みならリモートとブランチ名は省略可。
リモートへデータを送る
git push リモート名 ブランチ名
ローカルブランチの内容を同名のリモートリポジトリのブランチに送ります。
※上流ブランチが設定済みならリモートとブランチ名は省略可。
$ git push origin main
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 6 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 291 bytes | 291.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
To /home/user/backup
fd8f6e2..a946018 main -> main
オプション
「-f」強制的にpush。取り扱い注意。
「-u」上流ブランチを設定。
「-n」実際にリポジトリにpushせず、実行した場合の結果を表示。
まとめ
このページで扱ったコマンド一覧
※基本コマンド「git」は略。
コマンド | 目的 |
---|---|
init パス clone URL | 空のリポジトリ作成 リポジトリのコピー |
status diff diff --cached log | 変更確認 差分表示 ステージとコミット間の差分 コミット履歴 |
add パス commit commit --amend revert コミットID | 次回のコミット対象として追加 コミット 直近コミットの上書き コミットIDを打ち消すコミット |
branch branch ブランチ名 branch -m ブランチ名 branch -u ブランチ名 branch [-d or -D] ブランチ名 branch -r -d ブランチ名 fetch --prune push --delete リモート名 ブランチ名 switch ブランチ名 switch -c ブランチ名 | ブランチ一覧 作成 リネーム 上流ブランチに設定 ブランチ削除 リモート追跡ブランチ削除 不要なリモート追跡ブランチの削除 リモートのブランチを削除 ブランチの切り替え 作成+切り替え |
remote remote add リモート名 パス remote show リモート名 remote rename リモート名 名前 remote rm リモート名 fetch pull push | リモート一覧 リモートの追加 リモート詳細 リネーム 削除 データ取得 データ取得+統合 データを送信 |
参考にしたページ
おすすめ書籍
わからないことを調べると、新たにわからないことが出てきて沼でした……。
たぶん続きます。
次の記事
はじめてコミットするまで