GIT中stash和stage文件的区别

53

当我需要在切换到另一个分支之前保存来自一个分支的更改时,Git 有时会提示:在切换到另一个分支之前,请将文件存储或提交。但是我被建议使用 stash 选项,所以:

  1. 仅存储文件不足以在切换到另一个分支之前保存我的文件吗?

  2. 存储和隐藏文件之间有什么区别?

谢谢


2个回答

84

1.- 不仅要“保存”您的文件,还应按照Git期望的流程行事。 (建议,Git知道:)

2.- Stash将您修改过的文件移动到一个堆栈中。 因此,在同一个分支或另一个分支中,稍后您将能够将它们带回来并在项目中查看这些修改。

Stage是提交之前的步骤,您将修改过的文件添加到“已暂存文件”中以创建下一个提交。


现在,您可以使用stash将文件存储起来。

$git stash

并且你可以使用以下命令将文件添加到暂存区:

$git add
现在,为什么更好的是藏起你的更改而不是暂存它们? 也许文档中的这部分内容可以解决您的疑惑:
来自文档:

藏起:

通常,当您正在处理项目的一部分时,事情处于混乱状态,您想切换到其他分支进行一段时间的工作。问题在于,您不想提交一些未完成的工作,只是因为您以后想回到这个点。 解决这个问题的答案是使用 git stash 命令。

参见以下链接:


1
据我所知,我需要先将这些文件暂存起来,否则它们将被忽略而不会被存储。 - fernando1979
如果你将文件存储起来了,你应该“取消存储”以恢复它们。 现在,如果那些是新文件,是的,你应该先将它们暂存。 - mayo
我不明白为什么我需要先将新文件暂存,然后再将它们藏起来。难道暂存文件的目的不是为了“保存”尚未完成、测试的更改吗?那么为什么还需要像提交更改一样将它们暂存呢? - fernando1979
3
如果你的文件是“新的”,它们在你执行添加(add)操作之前不会被 Git 跟踪。之后,Git 就知道这些文件并可以存储它们。 - mayo
1
如果您的文件已经被跟踪,并且您的更改是“新的”,那么Git已经“知道”这些文件,因此您不必再次添加它们。 - mayo
Stash 会将你的代码还原到最新提交的状态(假设所有文件都已暂存),并将你的更改(差异)保存在某个地方。如果你想要取消 stash,可以使用 git stash pop - محمد جعفر نعمة

4

最好询问stash与commit之间的区别,而不是stash与stage之间的区别。

commitstash当前更改之前,您无法切换到另一个分支。

因此,如果您不想提交更改,同时还想切换到另一个分支,则解决方案是stash当前更改,切换到另一个分支。返回第一个分支后,可以应用stashed changes


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接