我需要存储git repo的当前状态。后来我需要回到州。
保存的状态应该包含当前分支并对其进行更改。
示例:
master
并修改了foo.py。 AFAIK stash
或临时分支在这里不起作用,因为分支名称未保存。
我可以使用管道命令,因为保存和恢复将在脚本中完成。
答案 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-ref
或git stash save -u
,则提交三次。第三个提交包含git通常单独留下的文件:未跟踪和忽略的文件。有关详细信息,请参阅git stash
documentation。