3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

git worktreeが便利だった

Last updated at Posted at 2023-05-25

複数ブランチを並行して開発したい

こんな状況ありませんか?

  • アサインされた開発チケットが複数あり、並行して開発している
  • 運用が挟まり、developブランチの内容を確認したい
  • 仕様待ちになったので、他チケットに着手したい
  • コードレビュー待ちの間は他の開発をしていたが、レビューの指摘が来たので対応したい

git stashは便利ですが、毎回行うのはしんどいし、stashした内容を再度反映させるときにミスするのも怖いですよね。
正直、stashした内容を覚えてないこともありませんか…?

git worktreeを使う

上記のような状況でgit worktreeが便利だったので紹介しておきます。
以下、リポジトリとブランチは下記として手順を説明します。

# リポジトリ
$ tree -L 1
.
└── myrepo

# ブランチ
$ git branch
   main
 * develop
   feature/t1

手順

1. worktreeの対象ブランチを決める

ここではfeature/t1ブランチとします。

2. worktreeを作成するディレクトリを決める

ここではdir_t1ディレクトリにします。
git worktreeでは、worktreeを作成するディレクトリを決め、そこに作業ブランチを指定してソースコードを取得します。
挙動としてはgit cloneを2回行うのに近いです1

3. worktreeを作成

下記のコマンドを実行します。
コツは、対象のリポジトリと並列でworktreeを作成することです。
そうすることで、ソースコードの検索時に複数ヒットしてややこしくなるのを回避します。

$ git worktree add ../dir_t1 feature/t1
#                   ↑ ../ とすることで、並列に作成しています

この状態でgit branchをすると、worktreeには+が付きます

$ git branch
   main
 * develop
 + feature/t1

4. worktreeの移動

cdを実行してディレクトリを移動するだけです。

$ cd ../dir_t1
$ git branch
   main
 + develop
 * feature/t1

$ tree -L 1
├── myrepo
└── dir_t1

この状態で、feature/t1として開発できます。
やっぱりdevelopに戻りたい!となった場合はcdで戻りましょう。
このときgit stashをしなくても、変更は消えません。

5. さらにworktreeを増やす

feature/t1での作業が途中でも、feature/t2に着手する必要がある、そんな場面もあるでしょう。
そのときも素直にworktreeを増やせばOKです。

$ git worktree add ./dir_t2 feature/t2
   main
 + develop
 + feature/t1
 * feature/t2

$ tree -L 1
├── myrepo
├── dir_t1
└── dir_t2

6. 不要になったworktreeは削除

開発が完了したworktreeは不要なので削除しましょう。

$ git worktree remove feature/t1

ぶっちゃけ

環境構築が必要な場合、再度構築し直す必要はあります。
そして当然ですがサーバーの起動などは、ポートが被ったらできません。

それでも、複数ブランチの並行開発においては十分に便利であり、もっと早く知りたかった…!と思ったので紹介しました。

  1. じゃあ2回cloneすればいいじゃん、という意見はもっともです。違いはこちらでもディスカッションされています。この記事では便利だよ!を伝えたかったので、詳細までは調べておりませんm(_ _)m

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?