我更改了我的仓库中的一些文件,但不希望它们被公开或创建任何临时分支来存储它们。我只想将这些更改保存在某个地方。那么哪个命令更好:
git stash save "save message"
或者
git commit -am "save message"
?
如果我使用git commit
,我的所有本地提交是否都会被一个git push
命令公开推送?如果我只想在其中推送一个特定的提交怎么办?
我更改了我的仓库中的一些文件,但不希望它们被公开或创建任何临时分支来存储它们。我只想将这些更改保存在某个地方。那么哪个命令更好:
git stash save "save message"
或者
git commit -am "save message"
?
如果我使用git commit
,我的所有本地提交是否都会被一个git push
命令公开推送?如果我只想在其中推送一个特定的提交怎么办?
推送时,您总是推送一个特定的提交(通常是当前签出分支顶端的提交)。但是,由于提交的哈希部分包含它所基于的提交(其父提交),因此您还必须推送所有父提交。通过推送父提交,您还必须推送他们的父提交等等。因此,您只能推送特定提交的整个历史记录。
如果你创建一个提交只是为了存储一些东西而不是为了推送,你需要确保你永远不会推送那个提交,也不会推送任何基于那个提交的提交。为此,在您完成基于临时提交的工作后,您需要将临时提交压缩到您创建的新提交中以推送它。
换句话说,是的,可以将提交用于临时的私有存储。但是,使用存储功能要容易得多。事实上,该功能就是为这个用例而设计的。
就我个人而言,我更喜欢直接去私人(本地)分支机构,但隐藏工作。请注意有关 stash 的两件事:
refs/tags/tag-foo
为;分支的形式为refs/tags/branch-foo
;而-single-labeled stash commit 被标记为refs/stash
。当然,分支标签也具有“添加提交时自动移动”功能,但如果您从不添加更多提交在那里,它们从不移动,因此它们可以很好地保存单个提交。)refs/stash
不会过期,但你可以使用配置条目来更改它——所以堆叠的 stash 提交也可以“过期”(同时 reflog 条目过期) . (更准确地说,它们“变得可收藏”,但如果它们消失了,这种区别就没有帮助。:-))藏匿的目的是为了短期保存一些东西。如果你曾经很晚才回到一个 repo 并找到了一堆名为“WIP on branch”的存储库,那么试图找出它们并不是一件有趣的事情。
:-)stash
提供的其他功能/错误是:
git stash branch
让您在事后改变主意并将存储变成分支。所以,如果“短期”成为一个问题(你打算今天下午修复它,但现在它已经被推迟了至少一个月),你毕竟可以把储藏室变成一个分支。git stash apply [--index]
将尽最大努力“重新制作”当前分支中应用的更改。--index
它将尝试独立地恢复分阶段和非分阶段的更改。(不过,在某些情况下这是不可能的。)git stash pop
自动为您丢弃存储参考。不幸的是,即使您打算使用git stash pop --index
并忽略该--index
部分,它也会这样做。如果您使用pop
. 如果你使用apply
, 并且稍后drop
一旦你确定你已经按照你想要的方式恢复了一切,你就可以避免这个问题。请注意,这git stash branch
意味着--index
:新创建的分支将分阶段和未分阶段的更改恢复到您执行git stash
. (该分支也会从您执行 时的提交中分支出来git stash
。)提交更改(git add
如果需要,可以进行更多操作,或者作为两个单独的提交,或其他)并继续进行,就像您创建了一个私有分支一样首先。
1堆栈的可过期部分包含输出中除stash@{0}
,之外的所有存储git stash list
。
我做的事情有点不同。对我来说,存储更多是为了快速保存,而不是日常工作,因为它们不是(容易)细化的,你可以实际存储的东西。(即,如果我有 20 个更改的文件,并且我想创建两个每个 10 个的 stash,这并不容易。)
这就是为什么我希望将我的日常更改提交给一个实际的,尽管是临时的分支,仅供我个人使用,这样我就可以在我去的时候包含笔记和我的工作。每日签到、实验等。基本上我不想把事情推到最终回购。
当我处于准备提交回主存储库的状态时,我对最初分支的提交使用“软重置”命令。这会将我所有临时分支提交的更改恢复为原始提交上的当前更改,而没有我的任何日常工作历史记录。
然后,我为这些“新”更改创建一个新分支,我可以一次全部提交它们,或者如果有意义的话,我可以将它分成几个提交(即一个用于后端,另一个用于前端 -结束的东西,另一个资源等)
完成后,我留下了一个不错的、新的、干净的分支,其历史对其他开发人员有意义,没有我的日常笔记,并准备合并并推回主仓库。然后我可以删除我的临时分支并继续下一个任务。
所以回顾一下...
另一个好处是我实际上可以将临时分支推送到远程仓库,这样我就可以在多个位置工作,而这是你无法使用存储的。请记住,当你完成后,清理服务器上的备份以保持 repo 浏览干净。(有些人可能会争辩说,从技术上讲,提交仍然存在,只是分离的,这是真的,但分支在 GIT 中是轻量级的,并且在某种程度上,它成为另一个不丢失工作的安全网,因为您可以取回分离的提交如果真的有必要。)
我建议你使用存储工具。这就是它在这里的原因。您可以存储您的更改,然后将它们添加到您的代码中。git stash 可以使用更多的功能。这是链接http://git-scm.com/book/en/Git-Tools-Stashing
我建议你在这里浏览一下 git 的文档。另请阅读有关该工具的信息。在此之后,您肯定会成为 git 的主人。