如果我在分支A上工作并且突然需要在分支B上进行工作,然后才准备在分支A上进行提交,那么我会将所做的更改存储在A上,结帐B,在那做我的工作,然后结帐A并应用该存储。
如果我在A上工作并且想停止一天的工作,我应该存放我的工作,然后在第二天(当我恢复工作时)应用它,还是应该保留原样?工作目录?我看不出为什么在这种情况下需要使用存储,除非有一些安全性好处。
此外,还有另一种情况:我在工作和在家中都工作。如果我想回家时还没有准备好提交,我可以将工作存储起来,将其推送到GitHub,然后将其存储在家里吗?
如果我在分支A上工作并且突然需要在分支B上进行工作,然后才准备在分支A上进行提交,那么我会将所做的更改存储在A上,结帐B,在那做我的工作,然后结帐A并应用该存储。
如果我在A上工作并且想停止一天的工作,我应该存放我的工作,然后在第二天(当我恢复工作时)应用它,还是应该保留原样?工作目录?我看不出为什么在这种情况下需要使用存储,除非有一些安全性好处。
此外,还有另一种情况:我在工作和在家中都工作。如果我想回家时还没有准备好提交,我可以将工作存储起来,将其推送到GitHub,然后将其存储在家里吗?
Answers:
藏匿只是一种方便的方法。由于分支是如此便宜且易于在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 --amend
# back to work!
git stash pop
git stash pop两次,您将失去这两个变更集之间的区别。
git stash push。这样做的主要原因是git stash push引入了存储所选pathspec的选项,但某些选项git stash save不支持。
我将在三段中回答。
第1部分:
git stash(将您未提交的更改保存在“存储区”中。注意:这将从工作树中删除更改!)
git checkout some_branch(更改为预期的分支-在这种情况下some_branch)
git stash list (列出藏匿处)
您可以看到:
stash @ {0}:在{branch_name}上执行WIP:{上次提交的SHA-1} {您分支的最后提交}}
stash @ {0}:在主服务器上进行WIP:085b095c6修改以进行测试
git stash apply (将隐藏应用于当前分支中的工作树)
git stash apply stash@{12}(如果您有很多存储,则可以选择要应用的存储-在这种情况下,我们将应用存储12)
git stash drop stash@{0} (从存储清单中删除-在这种情况下,是存储 0)
git stash pop stash@{1} (以应用选定的存储并将其从存储列表中删除)
第2部分:
您可以使用此命令隐藏更改,但这不是必需的。
您可以在第二天继续隐藏。
此命令用于隐藏更改并在不同的分支上工作,或用于实现代码的某些实现并保存在没有分支的存储中,并提交您的自定义案例!
之后,您可以使用一些存储卡,并检查是否更好。
第3部分:
本地存储命令隐藏您的更改。
如果要远程工作,则必须提交并推送。
您可以使用以下命令:
保存未提交的更改
git stash
列出您保存的存储
git stash list
要应用/获取x为0,1,2的未提交的更改...
git stash apply stash@{x}
注意:
应用存储并将其从存储列表中删除
git stash pop stash@{x}
应用存储并将其保存在存储列表中
git stash apply stash@{x}
如果git stash在工作副本中有更改时(而不是在暂存区中)发生更改,则git将创建一个隐藏对象并推入存储堆栈(就像您所做的一样,git checkout -- .但不会丢失更改)。稍后,您可以从堆栈顶部弹出。
stash命令将存储您自上次提交以来所做的所有更改。就您而言,如果您第二天要继续处理该文件,则没有任何隐藏的理由。我只会使用隐藏来撤消您不想提交的更改。
git stash不会更改您的分支。它尤其不会“还原”任何已提交的更改。它只会(临时)丢弃文件上所有未提交的更改。-看起来有些挑剔,但是在git的上下文中,这类单词具有非常特殊的含义。您真的不应该将这些混淆。
git stash不会触摸任何提交,因此根本不会修改任何分支。它不会从分支“删除”任何内容,也不会以任何方式“重置”它。分支保持不变,只有工作树中的文件改变。-那是两件事。
我知道StackOverflow并不是提供基于意见的答案的地方,但实际上我对何时搁置更改有很好的意见。
在工作空间/工作树中进行更改时,如果需要执行任何基于分支的操作(例如合并,推送,提取或拉取),则必须处于干净的提交点。因此,如果您有工作区更改,则需要提交更改。但是,如果您不想提交它们怎么办?如果它们是实验性的怎么办?您不想部分提交历史吗?当您推送到GitHub时,您不希望其他人看到什么吗?
在这种情况下,您可以进行硬重置。但是,如果您进行硬重置,您将丢失所有本地工作树更改,因为所有内容都会被覆盖到上一次提交时的位置,并且您将丢失所有更改。
因此,对于“何时存储”的答案是,当您需要使用同步的工作树/索引/提交返回到干净的提交点时,但又不想丢失本地更改过程。只要将您的更改搁置起来,就可以了。
完成储藏然后合并或拉动或推送后,就可以藏匿流行或应用,然后回到开始的地方。
GitHub一直在不断增加新功能,但是截至目前,现在有一种在其中保存存储的方法。同样,隐藏的想法是它是本地的和私有的。如果没有对工作站的物理访问,没有其他人可以窥视您的存储。Kinda与git reflog私有和git log公开一样。如果将其推送到GitHub,它可能不是私有的。
一种技巧可能是对工作区进行差异处理,将差异检入git存储库,提交然后推送。然后,您可以从家里拉东西,拿到差异,然后放松。但这是获得这些结果的相当混乱的方法。
git diff > git-dif-file.diff