藏匿什么?

Ral*_*alf 10 git fossil git-stash

我在各个地方搜索和搜索了一段时间,但没有找到一个好的答案.什么是藏匿,它用于什么?

(混乱的来源:使用美丽的燃料与化石,点击"隐藏更改"按钮,看到那里带有问号的文件,并且不知道如何处理它们......)

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 worktree

git worktree将创建一个新的工作文件夹,允许我们同时在多个分支上工作.每个副本都将指向原始存储库,而3-states新副本是新的副本.这节省了我们使用git stash甚至克隆新存储库的需要,因为这些工作树共享相同的仓库,我们可以检查任何工作树上的任何分支,我们可以做一个樱桃挑选或合并,所有这些都将在我们的机器上本地完成.

用法:

git worktree add <second path>
Run Code Online (Sandbox Code Playgroud)

将在您的计算机上创建另一个文件夹,允许您同时在不同的分支上工作.

这将允许您对新工作树上的任何实验进行操作,而不会对存储库本身产生任何影响.在附加图像中,您可以看到有2个单独的工作文件夹,但它们都使用单个存储库并共享内容.

在此输入图像描述

  • 这篇文章可以通过[文本,而不是屏幕截图](https://meta.stackoverflow.com/questions/285551/why-should-i-not-upload-images-of-code-data-errors)进行改进。 (3认同)

Tod*_*obs 10

Fossil,Git以及可能的其他版本控制系统都有一个藏匿的想法.Pro Git 有一个关于藏匿的部分.它部分说:

Stashing采用工作目录的脏状态 - 即修改后的跟踪文件和分阶段更改 - 并将其保存在一堆未完成的更改中,您可以随时重新应用这些更改.

换句话说,它是一种在执行其他操作时保存当前工作的方法,无需进行"实际"提交或影响存储库历史记录.