我使用 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/