git使用分支保存快照

时间:2009-08-18 07:04:04

标签: git

我很困惑如何在git中使用分支来保存临时工作。

这就是我的尝试:

/tmp/gt > git init
Initialized empty Git repository in .git/
/tmp/gt > date > t
/tmp/gt > git add t
/tmp/gt > git commit -m 'initial'
Created initial commit b722fde: initial
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 t

现在我将这项工作省去了分支“b”。

/tmp/gt > git branch b

并继续在master分支中工作。

/tmp/gt > date >> t
/tmp/gt > cat t
Di 18 Aug 2009 08:52:43 CEST
Di 18 Aug 2009 08:53:13 CEST

令我惊讶的是:

/tmp/gt > git checkout b
M       t
Switched to branch "b"
/tmp/gt > cat t
Di 18 Aug 2009 08:52:43 CEST
Di 18 Aug 2009 08:53:13 CEST

我预计在分支“b”中文件“t”仍处于相同的状态时 分支已创建(即只包含一个日期行)。

我可以避免这种自动合并,还是这个概念问题?

感谢您的指导,   阿克塞尔。

3 个答案:

答案 0 :(得分:4)

理由是,您的未分期更改(尚未)在任何分支上。如果您的更改与您请求的分支交换机不冲突,则可以将它们转移到新分支上。

如果你想回到完全分支b,那么你需要通过提交挂起的更改,存储挂起的更改或重置挂起的更改然后更改分支来确保你有一个干净的工作树。

行为是这样的原因是为了支持非常常见的工作流程:开始黑客攻击,实现黑客应该在另一个(或新的)分支上,(创建和)检查分支,继续进行黑客攻击。

答案 1 :(得分:2)

这是故意的:您对工作副本的所有当前更改都将合并。如果在master上再执行一次提交然后检出b,你将获得oneliner文件。

另一个解决方案是git checkout -f b,但这会覆盖您通常不想要的更改

答案 2 :(得分:0)

git reset --hard

会在Git存储状态时恢复状态,因此如果您在“git checkout b”行t恢复到其原始状态后再调用它。