我在我的仓库中更改了一些文件,但不希望它们被公开或创建任何临时分支来存储它们。我只是想在某个地方保存这些变化。那么哪个命令更好:
git stash save "save message"
或
git commit -am "save message"
?
如果我使用git commit
,是否所有本地提交都将被一个git push
命令公开推送?如果我只是想在其中推送一个特定的提交怎么办?
答案 0 :(得分:13)
推送时,总是推送一个特定的提交(通常是当前签出的分支的提示)。但是,由于提交的哈希部分由它所基于的提交(其父提交)组成,因此有来推送所有父提交。通过推送父提交,您还必须推送其父提交等等。因此,您只能推送特定提交的整个历史记录。
如果你创建一个提交只是为了存储而不是为了推送,你需要确保你永远不会推送该提交,也不需要任何基于该提交的提交。要做到这一点,在完成基于临时提交的工作之后,您需要将临时提交压缩到您创建的新提交中以推送它。
换句话说,是的,可以使用提交进行临时的私有存储。但是,使用隐藏功能要容易得多。实际上,对于这个用例,该功能是制作。
答案 1 :(得分:3)
就我个人而言,我更喜欢直接进入私人(本地)分支机构,但是仍然可以使用。请注意关于藏匿处的两件事:
refs/tags/tag-foo
;分支的格式为refs/tags/branch-foo
;单标签的存储提交标记为refs/stash
。当然,分支标签也有“自动”当您添加提交“功能时移动,但如果您从未在那里添加更多提交,则它们永远不会移动,因此它们也可以保存单个提交。”refs/stash
中的那些不会,但您可以使用配置条目更改此内容 - 因此堆叠的存储提交也可以“到期“(同时reflog条目到期)。 (更确切地说,它们“变得可收藏”,但如果它们消失了,这种区别就没有用了。:-))藏匿的意图是短期保存。如果你曾经回到过一个回购并找到一堆藏匿处,所有这些都被命名为“分支机构上的WIP”,试图找出它们并不好玩。
其他功能/错误:-) 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
以外的所有藏匿处。
答案 2 :(得分:0)
我建议您使用存储工具。这就是为什么它在这里。您可以存储您的chnge,然后将它们添加到您的代码中。您可以使用git stash使用更多功能。这是链接http://git-scm.com/book/en/Git-Tools-Stashing
我建议你一次浏览git here的文档。还阅读有关该工具的信息。在此之后,你肯定会成为git的主人。
答案 3 :(得分:0)
我做的事情有点不同。对我来说,存放更多是为了快速保存,而不是日常工作,因为它们(实际上)不能(很容易)实际存储。 (即如果我有20个已更改的文件,并且我想创建两个每个十个的藏匿处,那么这并不容易。)
这就是为什么我希望我的日常更改只针对我的个人用途而实际的,虽然是临时分支,所以我可以随时附上笔记和我的工作。每日签到,实验等。基本上我不的东西想要推到最终的回购。
当我处于准备好回到主回购的状态时,我会使用'软重置'我最初分支的提交命令。这将我的所有临时分支提交的更改恢复为原始提交的当前更改,而没有任何我的日常工作历史记录。
然后我为这些&#34; new&#34;创建一个新的分支。更改,我可以立即提交它们,或者我可以将它分成几个提交,如果它有意义(即一个用于后端的东西,另一个用于前端的东西,另一个用于资源等)< / p>
当我完成后,我离开了一个漂亮的,新的,干净的分支,其历史记录对其他开发者有意义,没有我的日常记录,并准备合并并推回到主要回购。然后我可以删除我的临时分支并继续下一个任务。
所以回顾......
另一个好处是我实际上可以将临时分支推送到远程仓库,这样我就可以在多个位置工作,而这些位置可以用存储来完成。请记住,当您完成后,清理服务器上的东西以保持回购浏览的清洁。 (有些人可能认为技术上提交仍然存在,只是分离,这是真的,但分支在GIT中是轻量级的,在某种程度上,它成为另一个不丢失工作的安全网,因为你可以找回一个独立的提交如果真的有必要的话。)