2009-08-18 112 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