2009-08-18 107 views
2

我很困惑如何在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 

并继续在主分支中工作。

/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”仍然是在相同的状态时创建 分支(即方含只是一个单日期线)。

我可以避免这种自动合并或这是一个概念性问题吗?

感谢您的指导, Axel。

回答

4

基本原理是,你的未分离变化不(在任何分支上)。如果您的更改与您请求的分支交换机不冲突,那么您可以将它们转移到新分支上。

如果你想回去正好分支B,那么你需要确保你通过提交挂起的更改,积攒未决更改或重置挂起的更改,然后改变分支有一个清洁的工作树。

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

3

这是故意的:您的工作副本的所有当前更改将被合并。如果在master上执行另一个提交,然后checkout b,则会有oneliner文件。

另一种解决方案是git checkout -f b,但将覆盖您的更改,您通常不希望

0
git reset --hard 

会恢复状态的Git已经存储,所以如果您在“git checkout b后叫它“行t将恢复到原始状态。

+0

但是,如果我再回去的“master”分支的修改都将丢失。 我想,我总是要意识到这一点,并做检查出一个分支前提交。 – axelrose 2009-08-18 07:14:40