如果我在分支A上工作并且在准备好在分支A上提交之前突然需要在分支B上工作,我将我的更改存储在A,结账B,在那里做我的工作,然后结账A并应用存储.
如果我在A上工作并且我想停止工作那一天,我应该把我的工作藏起来然后第二天应用它,当我恢复工作时,或者我应该保留原样 - 工作中未提交的修改文件目录.我不明白为什么在这种情况下我需要使用藏匿,除非有一些安全性好处.
另外,另一种情况 - 我在工作和家庭工作.如果我想回家的时候还没准备好提交,我可以把我的工作藏起来,把它推到GitHub然后把它藏在家里吗?
Mur*_*nik 79
藏匿只是一种方便的方法.由于分支是如此便宜并且易于在git中管理,我个人几乎总是喜欢创建一个新的临时分支而不是存储,但这主要是品味问题.
我喜欢藏匿的一个地方是,如果我发现我在上一次提交中忘记了某些内容并且已经开始在同一分支中处理下一个:
# Assume the latest commit was already done
# start working on the next patch, and discovered I was missing something
# stash away the current mess I made
git stash save
# some changes in the working dir
# and now add them to the last commit:
git add -u
git commit --ammend
# back to work!
git stash pop
Run Code Online (Sandbox Code Playgroud)
Ale*_*hko 76
我将打破三段的答案。
第1部分:
git stash(将您未提交的更改保存在“存储”中。注意:这会从工作树中删除更改!)
git checkout some_branch(更改为预期分支 - 在这种情况下some_branch)
git stash list (列出藏品)
您可以看到:
stash@{0}:{branch_name} 上的 WIP:{SHA-1 of last commit} {last commit of you branch}
stash@{1}:WIP on master:085b095c6 测试修改
git stash apply (将 stash 应用到当前分支中的工作树)
git stash apply stash@{12}(如果你有很多 stash,你可以选择应用什么 stash —— 在这种情况下我们应用 stash 12)
git stash drop stash@{0}(从 stash 列表中删除 - 在本例中为 stash 0)
git stash pop stash@{1} (应用选定的存储并将其从存储列表中删除)
第 2 部分:
您可以使用此命令隐藏更改,但这不是必需的。
您可以在没有藏匿的情况下继续第二天。
此命令用于隐藏您的更改并在不同的分支上工作或实现您的代码的一些实现并保存在没有分支的隐藏中并提交您的自定义案例!
稍后您可以使用一些存储并检查哪个更好。
第 3 部分:
本地的 Stash 命令隐藏您的更改。
如果你想远程工作,你必须提交和推送。
nzr*_*tmn 17
主要思想是
将更改隐藏在脏工作目录中
所以基本上 Stash 命令会保留一些您目前不需要或想要的更改;但你可能需要它们。
当您想记录工作目录和索引的当前状态,但又想回到干净的工作目录时,请使用git stash。该命令保存您的本地修改并恢复工作目录以匹配HEAD 提交。
Anu*_*mar 13
您可以使用以下命令:
保存未提交的更改
git stash
列出您保存的藏品
git stash list
要应用/取回 x 为 0,1,2 的未提交更改...
git stash apply stash@{x}
笔记:
应用存储并将其从存储列表中删除
git stash pop stash@{x}
应用存储并将其保存在存储列表中
git stash apply stash@{x}
我知道 StackOverflow 不是基于意见的答案的地方,但实际上我对何时搁置更改有很好的意见。
当您在工作区/工作树中进行更改时,如果您需要执行任何基于分支的操作,例如合并、推送、获取或拉取,您必须处于干净的提交点。因此,如果您有工作区更改,则需要提交它们。但是,如果您不想提交它们怎么办?如果它们是实验性的呢?您不希望提交历史记录的一部分?当您推送到 GitHub 时,您不希望其他人看到什么?
在这种情况下,您可以进行硬重置。但是,如果您进行硬重置,您将丢失所有本地工作树更改,因为所有内容都会被覆盖到上次提交时的位置,并且您将丢失所有更改。
因此,至于“什么时候应该存储”的答案,答案是当您需要使用同步的工作树/索引/提交回到干净的提交点,但您不想丢失本地更改时过程。只需将您的更改搁置在一个藏匿处,您就可以了。
一旦你完成了你的藏匿,然后合并、拉动或推动,你就可以藏匿流行或应用,然后你就会回到你开始的地方。
GitHub 不断添加新功能,但截至目前,现在有办法在那里保存存储。同样,存储的想法是它是本地的和私有的。如果没有物理访问您的工作站,其他人无法窥视您的藏匿处。有点类似于 git reflog 是私有的,而 git log 是公共的。如果它被推送到 GitHub,它可能不会是私有的。
一个技巧可能是对你的工作区做一个差异,将差异检查到你的 git 存储库中,提交然后推送。然后你可以从家里拉,得到差异,然后放松它。但这是实现这些结果的一种非常混乱的方式。
git diff > git-dif-file.diff
Run Code Online (Sandbox Code Playgroud)
如果您在工作副本(而不是暂存区域)中有更改时点击git stash,git 将创建一个隐藏对象并推送到存储堆栈上(就像您所做的那样,git checkout -- .但您不会丢失更改)。稍后,您可以从堆栈顶部弹出。