git-new-workdir : Commit in working tree A causes bogus changes in tree B

标签 git git-worktree

我使用 git-new-workdir 为一个 git 存储库提供两个工作树。这通常工作得很好,但如果在两个工作树中 checkout 相同的分支,我在提交某些内容后会得到有趣的行为:

  • 我从清理工作树和“master”开始。
  • 我在工作树 A 中提交了一些东西。

结果:

  • 工作树 A 中的“git status”显示“干净”(如预期)
  • 工作树 B 中的“git status”突然显示“要提交的更改”

显示的更改与我刚刚在 A 中所做的提交相反。对于 例如,如果 A 中的提交添加了一行,则“要提交的更改” 在 B 中显示此行已被删除。

这里发生了什么?这是 git-new-workdir 的已知限制吗? 有没有办法避免这个问题?或者我应该避免 checkin 而在两个副本中 check out 相同的分支?

我也有兴趣了解这里发生的事情 内部(我对 git 的内部机制知之甚少)。

注意:

我发现这个问题很容易通过运行来解决 git reset--hard 在 B 中,如果 B 在 A 中提交之前没有未提交的更改。

但是,如果我在 A 中提交,而 B 中有未提交的更改,则 真正未提交的更改与来自 提交,似乎没有简单的方法来解开它们。因此 问题。

最佳答案

我认为这是预期的行为。来自 http://nuclearsquid.com/writings/git-new-workdir/ :

Create a new commit or branch in one of your working directories, they’re instantly available in all working directories.

当您在 A 中提交更改时,该提交也可用于 B。由于您刚刚在 A 中添加的行不在 B 中,因此您似乎在最近一次提交后进行了更改。

我认为多个工作目录的目的是同时 check out 不同的分支。

关于git-new-workdir : Commit in working tree A causes bogus changes in tree B,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10455315/

相关文章:

git - 使用 Git 将多个项目部署到服务器的最佳方法是什么?

git - 什么是适合 TDD 的良好 git 工作流程?

git - 如何获取包含特定文件的 git 标签列表?

git - 我会用 git-worktree 做什么?

git checkout 用于开发/登台/生产的分支

git - 关于 git-new-workdir 分支同步

Github 单个 pull 请求更改多个存储库?

GIT Customer Merge 驱动问题(Windows msysgit 1.9.0)

git - 有没有办法摆脱指向远程不存在分支的本地 'worktree' 文件夹