保存当前仓库的 git 状态

gue*_*tli 0 git

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

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

例子:

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

AFAIKstash或临时分支在这里无济于事,因为分支名称未保存。

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

tor*_*rek 5

使用git stash 保存状态:它使两个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获取旧的之前使用它。git symbolic-ref如果引用不存在,它将退出非零。)


1或者,如果您使用git stash save -u或,则进行三次提交git stash save -a。第三次提交包含 git 通常单独留下的文件:未跟踪和忽略的文件。有关详细信息,请参阅git stash文档