1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

git worktreeではまったとこ

Posted at

はじめに

今回は、git worktreeを使う中で個人的にはまったポイントがあったので、その内容と対処方法を共有します。
同じような状況で困っている方の助けになれば嬉しいです。

github worktreeとは

ローカルであるブランチにて開発している最中に

  • 別ブランチで急ぎの修正をしたい
  • 今の作業をcommitしたくない
  • stashするほど作業が中途半端で、戻るタイミングも未定

といった状況になる場合があると思います。
そのようなときに便利なのがgit worktreeです。

git worktreeを使用すると、同じリポジトリを複数のディレクトリにチェックアウトでき、ブランチごとに独立した作業ディレクトリを持つことができます。

worktreeの作り方

testというリポジトリがあり、mainブランチからhogeという新たなブランチを切ってworktree作る場合は以下のようにします。

# git worktree -b add 新たなブランチ名 ~/新たなworktreeを配置するディレクトリ
git worktree -b add hoge ~/test-hoge

ハマってしまったところ

worktreeは、現在の作業中の差分を自動で引き継いではくれません。
例えば、

  • testリポジトリで developブランチを切って作業中
  • 途中でfeature-1ブランチを切って別作業をしないといけなくなった
  • developの内容を一旦置いたまま、feature-1用のディレクトリを作りたい

という状況を考えます。

このとき、developブランチから新たにworktreeを作成する場合、以下のコマンドを実行してもdevelopブランチで作業していた未コミットの変更は新たに作成した側のworktreeには引き継がれません。

git worktree add -b moved-develop ~/test-moved-develop

対策

新しく作業するブランチだけをworktreeにする

  • developの作業内容は元のディレクトリに残す
  • 新しく作業が必要なfeature-1ブランチのみをworktreeとして作成する

この運用で問題ない場合は、これが最もシンプルです。

今の差分を worktree 側に「お引っ越し」する

どうしても今の作業差分を別 worktree に移したい場合は、stash を使うことで対応できます。

1.元ディレクトリ(test)で差分をstashする

git status  # 変更内容を確認
git stash push -m "WIP develop before moving to worktree"

2.元ディレクトリ(test)がクリーンになったことを確認

git status

3.作成したworktree側(test-moved-develop)で stash を適用
stash は リポジトリ単位で共有されるため、別のworktreeからも同じstashを参照できます。

git stash list  # さきほどの "WIP develop..." が見える
git stash pop   # または git stash apply

まとめ

git worktreeにてはまった箇所と対処方法を紹介しました。

  • git worktreeは作業中の差分は自動では引き継がれない
  • 必要に応じて
    • 新しく作業するブランチだけをworktreeする
    • stashを使って差分を移動する

といった使い分けが重要だと学びました。

この記事が同じところではまった方の助けになれば嬉しいです。
最後までお読みいただきありがとうございました!

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?