场景:我正在处理一个文件:foo.html。我做了很多重要的改变,但还没准备好提交和推动。一位客户说道,"嘿,我们需要对foo.html"进行紧急文本更改。通常,我创建了一个foo.html(foo-copy.html)的副本,而不是在git中,撤消对foo.html的所有更改并进行新的紧急更改。提交紧急修复后,我将存储在foo-copy.html中的更改复制回foo.html。 pwhew!
在Git中有更简单的方法吗?就像在一个分支中隐藏当前状态foo.html所以当前的更改在我的工作区中看不到,打开另一个分支以对foo.html进行紧急更改,提交然后在第一个分支中弹出存储文件?
希望这是有道理的。并感谢任何提示。
答案 0 :(得分:2)
如果您的Git版本至少为2.6(该功能在2.5处进行但是有一些相当重要的错误修复,然后是2.6以后的小错误),我建议使用Git Worktree功能,git worktree add
:
$ git clone ... somerepo
$ cd somerepo
$ git checkout -b newfeature develop
... hack away for a while ...
此时你会中断。您现在可以执行此操作,而不是尝试将所有内容保存起来或制作新的克隆(也可以使用):
$ git worktree add -b quickfix ../temptree master
现在,您在../temptree
(somerepo
旁边)中有一个新分支quickfix
中的第二个工作树,该分支来自master
。您现有的工作树,完全没有受到干扰,仍然在您的分支newfeature
上。
您可以在新目录中执行任何您喜欢的工作。它有自己的HEAD和自己的索引。特殊约束是它不能与相同分支上的" main"存储库,您的主存储库也不能切换到其分支(所有添加的工作树都必须位于各自的分支上)。
完成添加的工作树后,只需将其删除即可。