使用git stash save或git commit进行本地更改?

Bal*_*ier 20 git github git-stash git-commit

我在我的仓库中更改了一些文件,但不希望它们被公开或创建任何临时分支来存储它们.我只是想在某个地方保存这些变化.那么哪个命令更好:

git stash save "save message" 
Run Code Online (Sandbox Code Playgroud)

要么

git commit -am "save message"
Run Code Online (Sandbox Code Playgroud)

?

如果我使用git commit,是否所有本地提交都将由一个git push命令公开推送?如果我只是想在其中推送一个特定的提交怎么办?

Ozn*_*256 15

在推送时,您总是推送一个特定的提交(通常是当前签出的分支的提示).但是,由于提交的哈希部分由它所基于的提交(其父提交)组成,因此您还必须推送所有父提交.通过推送父提交,您还必须推送其父提交等等.因此,您只能推送特定提交的整个历史记录.

如果你创建一个提交只是为了存储而不是为了推送,你需要确保你永远不会推送该提交,也不需要任何基于该提交的提交.要做到这一点,在完成基于临时提交的工作之后,您需要将临时提交压缩到您创建的新提交中以推送它.

换句话说,是的,可以使用临时私有存储的提交.但是,使用隐藏功能要容易得多.事实上,该功能做出了这个非常使用情况.


tor*_*rek 5

我个人更喜欢直接去私人(本地)分支机构,但隐藏工作。请注意有关 stashes 的两件事:

  • 他们是他们自己的承诺。除了标签之外,“stash”提交和绑定到分支或标签标签的提交之间没有根本区别。(一个标签标签的形式为refs/tags/tag-foo;一个分支的形式为refs/tags/branch-foo;一个标记为 stash 的提交被标记为refs/stash。当然,分支标签也有“在你添加提交时自动移动”功能,但如果你从不添加更多提交在那里,它们从不移动,因此它们也能很好地保存单个提交。)
  • 存储“堆栈” 1是使用引用日志实现的。引用日志可能会过期——默认情况下,大多数会(在 30 或 90 天后),而那些refs/stash不会,但您可以使用配置条目更改此设置——因此堆叠存储提交也可以“过期”(同时引用日志条目会过期) . (更准确地说,它们“变得可收藏”,但如果它们消失了,这种区别也无济于事。:-))

stash 的目的是为了短期保存一些东西。如果你很晚才回到仓库并发现一堆隐藏的东西,都命名为“分支上的 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如果需要更多的-ing,或作为两个单独提交,或其他),并继续执行,如果你犯了一个私有分支首先。


1堆栈的可过期部分由输出中除stash@{0},以外的所有存储组成git stash list。