Cod*_*ard 13
First of all: let us understand why do we need to use stash?为了理解什么藏匿我们首先需要了解3-stats.Git有一个名为build的模型3-states,它是用于处理本地存储库的内部git结构.
与之相关的"问题" 3-states是每个存储库有一个,而不是每个分支一个.因此,当我们切换分支时,唯一被修改的是HEAD指向不同的提交.
在git中,分支只是给定提交的别名,因此如前所述切换分支只会改变HEADwhile而保持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?问题是,当使用存储时,我们没有能力真正在多个分支上工作,因为每次我们希望切换分支时都必须存储.
我们可以将存储代码拉到错误的分支的另一个问题是,如果我们犯了错误,我们必须弄清楚哪些文件是正确的.
So how can we really work on multiple branches?自2007年以来,Git拥有这种能力.在contrib文件夹下,这是一个名为'new-workdir'的隐藏命令,后来被添加到gin inversion 2.5并被重命名为git worktree.
git worktreegit worktree将创建一个新的工作文件夹,允许我们同时在多个分支上工作.每个副本都将指向原始存储库,而3-states新副本是新的副本.这节省了我们使用git stash甚至克隆新存储库的需要,因为这些工作树共享相同的仓库,我们可以检查任何工作树上的任何分支,我们可以做一个樱桃挑选或合并,所有这些都将在我们的机器上本地完成.
用法:
git worktree add <second path>
Run Code Online (Sandbox Code Playgroud)
将在您的计算机上创建另一个文件夹,允许您同时在不同的分支上工作.
这将允许您对新工作树上的任何实验进行操作,而不会对存储库本身产生任何影响.在附加图像中,您可以看到有2个单独的工作文件夹,但它们都使用单个存储库并共享内容.
Tod*_*obs 10
Fossil,Git以及可能的其他版本控制系统都有一个藏匿的想法.Pro Git 有一个关于藏匿的部分.它部分说:
Stashing采用工作目录的脏状态 - 即修改后的跟踪文件和分阶段更改 - 并将其保存在一堆未完成的更改中,您可以随时重新应用这些更改.
换句话说,它是一种在执行其他操作时保存当前工作的方法,无需进行"实际"提交或影响存储库历史记录.