2016-06-07 83 views
0

這是一個總的noob git問題,我意識到人們已經問過類似的問題,但我不知道該怎麼做。我正在研究一個項目,並想嘗試一些東西。它不工作,現在我想回去。git沒有提交分支 - 還原變化

在那裏我開始我的實驗來看,我這樣做:

的Git分支實驗
混帳結賬實驗

然後我做了一堆東西。然後我回去試了這一點:

git的結帳發展

但是我所有的實驗性更改仍然存在。我可以回到之前的提交,但是這會失去很多工作。

我意識到的是我應該在分支之前進行修改。那麼,我在SourceTree中探索一下,試圖感受一下我的項目所處的狀態。但是現在我陷入了困境。根據SourceTree,最後一次提交是在12小時前。未提交的更改僅顯示了我8小時前做出的兩項非常小的修改。我似乎失去了我工作的最後8個小時。兩個分支都是一樣的。

我擰了嗎?有沒有辦法讓我回到我分叉的地步?謝謝。

+0

你是否也檢查過實驗分支? –

+0

是的。他們都顯示相同的狀態。 – Alex

+0

我讀過git文章:_note說如果你的工作目錄或臨時區域有未提交的更改與你正在檢查的分支發生衝突,那麼Git不會讓你切換分支。切換分支時最好有一個乾淨的工作狀態。有很多方法可以解決這個問題(即存儲和提交修改),我們稍後會介紹,存儲和清理_ –

回答

0

是的,你搞砸了,但好事是你會從這個錯誤中吸取教訓。當您使用Git時:頻繁使用commit,使用切換上下文時使用stash

在你的例子中,你做了一些修改,例如你修改了foo並創建了bar。你可以看到的變化實驗開始前:

$ git status 
On branch master 
Changes to be committed: 
     new file: bar  
Changes not staged for commit: 
     modified: foo 

在這一點上,如果你創建一個新的branch並在其上進行切換,什麼都不會我修改既不在你working directory或您index因爲新的分支experiment指向與主人master一樣提交。

$ git checkout -b experiment 
A  bar 
M  foo 
Switched to a new branch 'experiment' 

$ git status 
On branch experiment 
Changes to be committed: 
     new file: bar  
Changes not staged for commit: 
     modified: foo 

所以從這裏如果你做了改變,你會失去你以前的工作。也就是說,這並不完全正確,因爲bar在索引上(在執行git status時爲綠色)。如果修改bar您的通知,您的工作目錄的變化,但以前的版本仍保留在指數:

$ echo "bar" >> bar 
$ git status 
On branch experiment 
Changes to be committed: 
     new file: bar 
Changes not staged for commit: 
     modified: bar 
     modified: foo 

兩個最好的解決方案,以保持你的變化軌跡是:

  1. 提交頻頻對虛擬分支。
  2. 使用git stash在上下文之間切換。

在你的情況,你會犯一個虛擬分支更改開始實驗前:

$ git checkout -b previous_changes 
$ git commit -am "Something I want to keep" 
$ git checkout -b experiment [email protected]{1} 
do some changes... 
0

我意識到那是什麼,我應該犯我我改變之前分支。

是的,當您有未提交的更改並且切換到新的分支時,那些未提交的更改將繼續存在,並且在新分支上時仍然存在。由於它們沒有提交,所以這些更改不屬於某個分支甚至是存儲庫,因此您無法恢復這些更改。

如果您繼續在新分支上工作,您最終修改了這些更改,甚至可能犯下這些更改或將它們還原。在這一點上,他們迷路了。

從未添加到存儲庫的更改不屬於存儲庫,Git不知道它們。所以不幸的是,如果你不能從你在新分支上做的實際承諾的修改中恢復它們,它們就會丟失。