2016-09-26 10 views
5

私はgit worktree addを使って新しいワークツリーを作成しました。私はそれがworktreeと同じ名前でリポジトリに新しいブランチを作成したことに気付きました。この枝は何のためですか?git worktreeがブランチを作成して削除するのはなぜですか?

2番目のワークツリー内に他の既存のブランチをチェックアウトしました。 git worktree addが作成したブランチを削除してもよろしいですか?

+0

私が間違っている可能性を削除し、私の推測では、この分岐がworktreeでの作業中にあなたが実際にあるかということです。 –

+0

後でブランチを切り替える代わりに、ワークツリーを作成したときにチェックアウトしたい既存のブランチを指定する必要があると思います。それで、私は新しい支店を作るのを避けていたでしょう。 –

+1

私は実際にはなぜこうしたのかは言えませんが、新しい作業ツリーのブランチを指定する必要があります。デフォルトでは、新しいワークツリーと同じ名前のブランチを作成します。木。 'git worktree add/path/to/foo'に' -b'や '-B'や最後の引数を指定せずに失敗する可能性がありますが、ここで' foo'をデフォルトにするのではなく、ここで 'foo'を使ってデフォルトにすると便利です。 – torek

答えて

7

同じブランチを別の作業ツリーで同時にチェックアウトすることはできないため、ブランチが必要です。

ワークツリーを追加するときにブランチを指定しないと、gitは現在のブランチとワークツリーディレクトリの名前に基づいて自動的にブランチを追加します。

私は同じ支店のチェックアウトを2回発行できないのはなぜですか?彼らが両方の支店を共有する場合、あなたがBにコミットするときにworktree Aに何が起こるかを考えてください... worktree Aはローカルの違いとしてコミットを見ますが、逆です!ちょうどあなたがしたかのようにgit reset --soft HEAD^ ...それはかなり危険です。

ところで、それはチェックアウトされた非ベアリポジトリのブランチであるにをプッシュできないのと同じ理由です。

あなたの最後の質問について:ブランチを削除できますか?もちろん、そのブランチは決して特別なものではありません。どこでもチェックアウトされていない限り削除できます。

+0

ありがとう!私はダブルチェックアウトの問題について別途質問しました。http://stackoverflow.com/questions/39665570/why-can-two-git-worktrees-not-check-out-the-same-branch –

3

git worktree - これは明らかに以下のとおりです。

COMMANDS 
     add <path> [<branch>] 
      Create <path> and checkout <branch> into it. The new working directory is linked to the current repository, sharing everything 
      except working directory specific files such as HEAD, index, etc. 

      If <branch> is omitted and neither -b nor -B is used, then, as a convenience, a new branch based at HEAD is created automatically, 
      as if -b $(basename <path>) was specified. 

     prune 
      Prune working tree information in $GIT_DIR/worktrees. 
2

--detachで切り離しモードで実行できるように見えますが、ブランチは作成されません。これは、ワーク・ツリーで変更を行う予定がなく、たとえばビルドまたは実行テストを実行する場合に便利です。

出典:

まず、ダブルチェックにごworktreesをすべてリスト:他の人はこの質問に答えるのよう https://stacktoheap.com/blog/2016/01/19/using-multiple-worktrees-with-git/#long-running-tasks

4

が、私は、folderを削除worktreeを削除し、ここbranchを削除するコマンドを置きます。 ..

$ git worktree list 

、その後、worktreeのフォルダを削除

その後
$ rm -rf ../path/to/worktree 

、複数のworktreeを持っている場合にはworktree自体

$ git worktree prune 

を削除し、上記のコマンドはそのパスがもはや存在しないので、心配しないことをworktreeを剪定します!

最後に、ブランチ(worktreeと同じ支店名)

$ git branch -D <branch-name> 
関連する問題