github / github/copilot-cli

Copilot CLI uses global git stash in worktrees

Đang mở
#1,725 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Shell
Star
11.2k
Fork
1.9k
Merge trung bình
14 giờ 16 phút
Pull request đã merge (30 ngày)
6

Mô tả

### Describe the bug

### Summary
When running multiple Copilot CLI agents in separate Git worktrees of the same repository, the agents use git stash under the hood. Because refs/stash is global to the repository, stashes created by one agent/worktree are visible to all others. As a result, another agent can inadvertently stash pop the wrong entry, causing cross‑worktree contamination (applying or dropping a different agent’s stash). This breaks the expected isolation of background sessions and can lead to data loss or corrupted workspace state. (Worktrees explicitly share refs and history; only HEAD and the index are per‑worktree.)

### Background / Rationale
In Git, all worktrees share the same repository object database and refs; only certain files are worktree‑local (e.g., HEAD, index). The stash lives at refs/stash, so the stash list is shared across worktrees. [[git-scm.com]](https://git-scm.com/docs/git-worktree), [[devtoolbox.dedyn.io]](https://devtoolbox.dedyn.io/blog/git-worktrees-complete-guide)
VS Code’s background‑agent guidance emphasizes using worktrees to isolate changes; however, using global stash inside those worktrees undermines that isolation when agents run in parallel. [code.visua...studio.com]

### Special Note
The mechanism used by GitHub Copilot CLI to resolve its stashing issues should not interfere with a user using git stash as it works out of the box/standard git stash management workflows.

### Affected version

GitHub Copilot CLI 0.0.419.

### Steps to reproduce the behavior

From a repo, create two worktrees A and B (e.g., git worktree add ../wt-A and git worktree add ../wt-B ). [git-scm.com]
Start Copilot CLI in both folders (A and B) and instruct each agent to make edits that trigger its internal use of git stash (e.g., when switching tasks/branches or preparing patches).
Agent in worktree A performs git stash (implicitly via Copilot).
Agent in worktree B later runs git stash pop (implicitly via Copilot).
Observe that B applies/drops A’s stash, not B’s own, because both sessions share the single refs/stash stack.

### Expected behavior

Each Copilot CLI session operating in a different worktree should have stash‑like isolation, so that temporary saves/restores of working changes cannot collide across worktrees.
Alternatively, Copilot CLI should avoid global stash entirely when multiple sessions might run concurrently within the same repository.

### Additional context

### Environment
Tool: GitHub Copilot CLI (latest at time of filing)
Context: Multiple concurrent Copilot CLI background sessions, each operating in its own git worktree directory for the same repo
Git: recent (worktrees enabled)
OS: reproducible on macOS and Linux (likely OS‑agnostic)

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.