目的別Gitまとめ1

Tips

まだまだGitに慣れず、後で参照できるように、目的別にコマンドや、やり方等をまとめることにしました。

目的一覧は「目次」から、扱ったコマンドの一部を最後の「まとめ」で表にしています。

使用した環境
WSL2 - Ubuntu 20.04 LTS
git version 2.35.1

 Androidアプリを作成しました。
 感情用のメモ帳です。

スポンサーリンク
スポンサーリンク

初期化

空のリポジトリを作成する

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

どのような更新があるか調べるにはdiffを使います。
例「git diff 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
リモート一覧
リモートの追加
リモート詳細
リネーム
削除
データ取得
データ取得+統合
データを送信

参考にしたページ

おすすめ書籍

わからないことを調べると、新たにわからないことが出てきてでした……。
たぶん続きます。

次の記事

はじめてコミットするまで

タイトルとURLをコピーしました