保存仓库当前的 git 状态

问题描述 投票:0回答:2

我需要存储 git 存储库的当前状态。稍后我需要返回状态。

保存的状态应包含当前分支及其更改。

示例:

  1. 我在分支
    master
    并修改了foo.py。
  2. 保存状态
  3. 修改仓库:示例:签出其他分支。
  4. 返回状态:切换到master并恢复修改后的foo.py

AFAIK

stash
或临时分支在这里不起作用,因为分支名称未保存。

我可以接受管道命令,因为保存和恢复将在脚本中完成。

git
2个回答
6
投票

使用

git stash
will 保存状态:它会进行两个不在任何分支“上”的 1 提交(它们是通过特殊的
refs/stash
名称找到的),其中包含索引的状态以及你的工作树的状态。 然后,它使用
git reset --hard
删除任何工作树和索引更改,从而可以安全地更改分支。

stash
不保存的一项状态是保存存储时您所在的分支(如果有)的名称。

要保存它,您需要运行

git symbolic-ref HEAD
(使用
--short
获取分支名称,并注意,如果
HEAD
不是符号引用,即当前“分离”,则它退出非零;在这种情况下)您可能需要将当前提交 ID 保存在某处,可能是在引用中以保护它)。

请注意,如果没有要保存的状态,

git stash save
将不会执行任何操作,因此明智的做法是在
refs/stash
步骤之后验证
git stash save
是否存在并指向新的不同的提交 ID。 (这在脚本中实现起来并不太困难:使用
git rev-parse -q --verify refs/stash
获取新的提交 ID,并在
save
之前使用它来获取旧的提交 ID。与
git symbolic-ref
一样,如果引用不存在,它将以非零值退出不存在。)


1或者,如果您使用

git stash save -u
git stash save -a
,则进行三次提交。 第三次提交包含 git 通常不处理的文件:未跟踪和忽略的文件。 有关详细信息,请参阅
git stash
文档


0
投票

我最近开始开发一个名为

git chord
的 git 扩展,用于在底层使用惯用的 git 管理存储库的整体状态。该扩展是完全可配置的且易于使用。该脚本完全可移植且符合 POSIX 标准。

我必须说目前处于测试阶段。欢迎提出想法和贡献。这是项目源码库:

https://github.com/davidsusu/git-chord

当我试图计划版本控制课程的学生如何提交完整的存储库时,我第一次想到了对这样一个工具的需求。后来我看到了多分支环境管理、灾难恢复、时间旅行、CI/CD 的用例,甚至简单地与其他人共享存储库的状态。

要保存当前状态,需要调用

snapshot
子命令:

git chord snapshot

要恢复上次保存的状态,请使用

apply
子命令:

git chord apply
© www.soinside.com 2019 - 2024. All rights reserved.