【问题标题】:How to stash the complete state of the worktree, including ignored, untracked, staged and/or unstaged files?如何存储工作树的完整状态,包括忽略、未跟踪、暂存和/或未暂存文件?
【发布时间】:2020-04-30 20:50:21
【问题描述】:

我有一个客户做了一堆乱七八糟的事情,我想把它藏起来,这样我就有了一个原始状态,但可以在以后恢复到乱七八糟的状态。我想隐藏然后恢复的东西可能包括:

  • .gitignore范围内的东西
  • 新的未跟踪文件
  • 新的、已跟踪但未暂存的文件(即git add -N
  • 暂存但未提交的文件。

简而言之,我希望通过使用git clone 创建一个新客户端并在那里完成工作,但都在同一个客户端中获得相同的效果。


编辑:git stash -a 之类的东西无法完成我想要的特定情况:

touch new_file
git add -N new_file
git stash -a

这会导致错误,并使stash 什么都不做。

【问题讨论】:

  • 将整个内容复制到其他地方是否可行?如果有帮助,您可以区分目录。
  • git stash 在我看来并不是一个很好的工具。 git worktree add 更好,只要你的 Git 至少是 2.15 版本。制作新的克隆是唯一 100% 完美的解决方案。请注意,您可以克隆您的克隆,以加快速度,然后使用 git remote addgit remote set-url 添加第二个遥控器或更改与 origin 遥控器关联的 URL,然后使用 git fetch
  • @Inigo 我确实阅读了文档,只是没有谈论它。我提到的事情清单是我的调查没有找到干净的解决方案或(例如git add -N)任何解决方案的事情清单。 - 而且,不,它不是开放式的,如果 git 没有专门针对此的功能,而不是我正在寻找的那个缺乏的精确陈述,我只会克隆另一个客户端而不是做任何其他类型复杂的hacky解决方法,
  • @torek,我已经在使用带有备用遥控器的额外客户端。我没有发现它们是理想解决方案的原因是:1)它们固有地添加了其他要管理的东西(我 git pull'ed 我的所有分支机构 /everywhere/?),2)它们管理起来更复杂(做你知道 off hand 如何通过远程 git-stash/pop 吗?) 3)它强制文件位于不同的 OS 路径,(这有一些优势,但也可以增加上下文转换成本)。 -- git worktree 我想会解决其中的一些问题,但仍然会增加从根本上需要的微不足道的操作的复杂性。
  • @Inigo touch new_file ; git add -N new_file ; git stash push -a -> 错误

标签: git git-stash


【解决方案1】:

可以使用git stash -a 存储所有跟踪、未跟踪和忽略的文件。这是git stash 提供的最完整的选项。

如果您需要更复杂的东西或需要其他功能,例如保留可执行位以外的权限,那么您将不得不仅将文件复制到另一个目录或使用tar

您也可以使用git branch 创建另一个具有相同历史记录的分支,并使用git worktree 在其他地方检查它,然后将文件复制过来。

【讨论】:

  • 我提到的一个案例导致git stash -a拒绝存储任何东西touch new_file ; git add -N new_file ; git stash -a --> 导致error: Entry 'new_file' not uptodate. Cannot merge. Cannot save the current worktree state
  • 这是git stash 唯一可用的功能,可以做任何接近你想要的事情。如果你使用了--intent-to-add,你告诉 Git 你要添加它,所以如果你想使用该对象创建一个提交(即,一个隐藏提交),你实际上必须遵循并添加它。
  • 所以git stash 是根据提交来实现的(就我想要完成的事情而言,这100% 无关紧要)这一事实妨碍了我?我可以接受,以为我希望得到更好的答案。
  • 是的,这就是你的问题。如果您愿意,欢迎您将问题报告到 Git 列表。
  • 我认为我不会让他们重新实现 git stash 以不提交提交。如果我有任何机会让他们从根本上改变 git 的操作模型,那不是我要开始的。 :0)
猜你喜欢
  • 1970-01-01
  • 2011-02-27
  • 2018-09-08
  • 2018-09-29
  • 2016-12-19
  • 2015-09-02
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多