我在不同的地方搜索了一段时间,但没有找到一个好的答案。什么是藏品,它是用来做什么的?
(混淆的来源:在Fossil中使用漂亮的燃料,单击“隐藏更改”按钮,看到带有问号的文件,不知道如何处理它们……)
发布于 2017-02-25 22:18:15
First of all: let us understand why do we need to use stash?
为了理解stash是什么,我们首先需要理解3-stats。Git有一个名为3-states的内置模型,它是用于处理本地存储库的内部git结构。

3-states的“问题”在于每个存储库都有一个分支,而每个分支没有一个分支。因此,当我们切换分支时,唯一被修改的就是指向不同提交的HEAD。
在git中,分支只是给定commit的别名,因此如前所述切换分支只会更改HEAD,而保持working directory && stage 不变,并保持所有修改不变。工作目录正在使用新分支拥有的所需文件进行更新,但这不是我们解释的一部分。
因此,如果我们添加了新文件,修改了一些其他文件,现在我们希望移动到不同的分支,我们将在工作目录和阶段区域中删除污垢,如下所示。
不管我们现在在哪个分支上工作,我们都会有一些脏工作跟随着我们。

So how can we work on multiple branches?
大多数git用户使用stash是为了获得在多个分支上同时工作的能力。git stash是完成此任务的基本方法,因为git stash将我们的工作保存在一个名为stash的单独区域中。
然后,我们可以在任何给定的时间为任何给定的分支签出代码。

到目前为止,还不错。
Where is the problem and why not use stash in first place?
问题是,当使用stash时,我们没有能力真正在多个分支上工作,因为每次我们希望切换分支时,我们都必须使用stash。
另一个问题是,我们可以将存储代码拉到错误的分支,然后我们必须找出哪些文件是正确的,如果我们做错了。
So how can we really work on multiple branches?
Git自2007年起就有了这项功能。在contrib文件夹下,有一个名为'new-workdir‘的隐藏命令,它后来被添加到2.5版本的git中,并被重命名为git worktree。
git worktree
git worktree将创建一个新的工作文件夹,允许我们同时在多个分支上工作。每个副本都将指向原始存储库,而3-states是一个新的最新副本。这为我们节省了使用git stash甚至克隆新存储库的需要,因为这些工作树共享相同的存储库,我们可以签出任何工作树上的任何分支,我们可以选择或合并,所有这些都将在我们的机器上本地完成。
用法:
git worktree add <second path>将在您的计算机上创建另一个文件夹,允许您同时在不同的分支上工作。
这将允许您在新的工作树上进行任何实验,而不会对存储库本身产生任何影响。在附加的图像中,您可以看到有2单独的工作文件夹,但它们都使用单个存储库并共享内容。

发布于 2012-06-29 19:58:52
Fossil、Git和其他可能的修订控制系统都有一个stash的想法。Pro Git has a section on stashing。它说,在某种程度上:
存储采用工作目录的脏状态-即已修改的跟踪文件和暂存的更改-并将其保存在可随时重新应用的未完成更改堆栈中。
换句话说,这是一种在做其他事情的同时保存当前工作的方法,而不会进行“真正的”提交或影响您的存储库历史记录。
https://stackoverflow.com/questions/11260981
复制相似问题