保存回购的当前git状态

时间:2014-03-25 09:58:00

标签: git

我需要存储git repo的当前状态。后来我需要回到州。

保存的状态应该包含当前分支并对其进行更改。

示例:

  1. 我在分支master并修改了foo.py。
  2. 保存状态
  3. 修改repo:示例:checkout其他分支。
  4. 返回状态:切换到master并恢复修改后的foo.py
  5. AFAIK stash或临时分支在这里不起作用,因为分支名称未保存。

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

1 个答案:

答案 0 :(得分:4)

使用git stash 保存状态:它会使两个 1 提交不在任何分支“上”(通过特殊{{找到它们) 1}}代替),包含索引的状态和工作树的状态。然后使用refs/stash删除任何工作树和索引更改,从而可以安全地更改分支。

git reset --hard未保存的一个状态是保存存储时您所在的分支的名称(如果有)。

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

请注意,如果没有要保存的状态,HEAD将不执行任何操作,因此最好验证git stash save是否存在并指向refs/stash之后的新的不同提交ID步。 (这在脚本中并不难:使用git stash save获取新的提交ID,并在git rev-parse -q --verify refs/stash之前使用它来获取旧的提交ID。与save一样,它将如果引用不存在,则退出非零。)


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