Git・ブランチコマンド
Gitのブランチ関係のコマンドを自分用にまとめる!
git branch
- 現在のリポジトリに存在するすべてのブランチを表示する。
- 現在作業中のブランチ(チェックアウト中のブランチ)にアスタリスク
*
が付いて表示される。
下記では、現在のブランチが main
で、他に feature/login
と feature/signup
というブランチが存在してることを示してる。
$ git branch
* main
feature/login
feature/signup
git branch ブランチ名
- 新しいブランチを作成する。
- 作成されるブランチは、現在チェックアウト中のブランチ(例:
main
)の最新のコミットを元に作成される。 - ただし、この時点では新しいブランチに切り替わらないため、
git checkout ブランチ名
の入力が必要。
下記は feature/test
という名前の新しいブランチを作成している。
$ git branch feature/test
git checkout ブランチ名
- 入力したブランチに切り替え(チェックアウト)。
下記は、現在の作業ブランチが feature/test
に切り替わったことを示している。
作業ディレクトリが feature/test
になり、以降の作業(コミットや変更)はこのブランチ上で行われる。
$ git checkout feature/test
Switched to branch 'feature/test'
git switch ブランチ名
git switch
は、これだけで「ブランチ作成+切り替え」の2つの操作を1度にできる。
git switch -c feature/test
ブランチ作成した後の手順
空の状態でコミットする
ローカルでブランチを作成しても、それをリモートに反映するためには git push が必要となる。
しかし、リモートリポジトリに空のブランチだけを push することはできない(何もコミットがない場合、リモートに反映されない)。
そのため、 --allow-empty を使った空コミット を追加し、最低1つのコミットを持たせてリモートに push できるようにする。
git commit --allow-empty -m "first commit"
リモートリポジトリ(origin)にpushする
git push origin ブランチ名
リモートブランチを別パソコンに引き継ぐ方法
例えば、会社でブランチを作成し、途中まで開発を進め、それを家のパソコンで引き継いで、続きを開発する場合は、git pull
を使用し、リモートからブランチを取得して作業を再開する。
以下にその流れを詳しく説明します。
1. リポジトリをクローンする(初回の場合)
まず、家のパソコンにリモートリポジトリをクローンする。
git clone https://github.com/<username>/<repository>.git
クローンを行うと、リモートリポジトリに存在するすべてのブランチ(main やその他のブランチ)と、そのブランチに含まれる履歴(コミット)はローカルにコピーされる。
ブランチで作成した機能がリモートリポジトリにプッシュされていれば、クローン先でもそのブランチが存在し、内容も引き継がれる。
ただし、デフォルトではリモートの デフォルトブランチ(通常は main
) のみがチェックアウトされる。
2. 他のリモートブランチを確認する
git branch -r
コマンドで、リモートリポジトリ上のすべてのブランチを確認する。
git branch -r
例:
origin/main
origin/feature/search
3. 特定のブランチをローカルに作成して引き継ぐ
リモートブランチ(例:feature/search
)をローカルに引き継ぐ場合、以下のコマンドを実行します:
リモートブランチをローカルでチェックアウト
リモートブランチをローカルに作成し、同時に切り替えます。
git checkout -b feature/search origin/feature/search
これでローカルに feature/search
ブランチが作成され、リモートの feature/search
ブランチが引き継がれます。
4. その後の開発を進める
ローカルで開発を続け、変更をコミットしてリモートにプッシュすることで、作業を引き継げます。
# ファイルを編集して変更をステージング
git add .
# コミット
git commit -m "Continue development on feature/search"
# リモートにプッシュ
git push origin feature/search
Discussion