2016-07-07 65 views
1

我想要做什麼:我正在使用git版本控制的代碼。我意識到一些測試不是使用舊版本的代碼運行的(2次在同一分支上提交)。所以我想運行那些需要修改一些git-follow輸入文件的測試,然後我想回到我的開發版本,就好像什麼都沒發生一樣(不關心輸入文件中的變化,因爲我不關心關於這些變化)。GIT進入舊版本並返回到正在開發的版本

我做了什麼:我git存儲我的underdev版本,然後git結帳到舊版本。我修改了幾個文件並做了運行。然後就出現了這個問題:當我應用存儲時,我沒有回到我的underdev版本(我想我會)。在舊版本中,我保持獨立的頭部狀態。

幸運的是我注意到了underdev版本的ID,所以我認爲我可以結帳返回那裏。但是,任何人都可以向我解釋我做錯了什麼,以及如何以乾淨的方式做我想做的事。

回答

0

你underdev是兩件事情:

  • 提交歷史
  • 不分階段的變化

你救使用Git藏匿在不分級的變化。

爲了回到你的underdev版本,你需要結賬到你藏起來的那個分支。

你可以在git stash show找到該信息。

這是你的工作流程:

git stash 
git checkout OLD_COMMIT 
*do some work* 
#Throw the changes away 
git checkout . 
git checkout UNDERDEV_BRANCH 
git stash pop 
+0

'藏匿流行'在這裏可能是有風險的,因爲如果重新應用補丁混淆了工作可能會丟失。對於OP的情況,使用'stash apply'可能會更安全一些... –

+0

@ Jonathan.Brink在完全相同的代碼中創建的存儲沒有理由不適用。但是,如果你想要超級安全,你可以使用'stash apply'和'stash drop'。 – blue112

+0

將存儲應用於原始存儲的相同代碼時的好處是沒有衝突的可能性。在Git工作流程中仍然需要採取安全措施時 –

0

比方說,你開始了對foo分支。

這句話似乎在暗示你沒有得到你的頭指針回到它原來的位置:

我在舊版本仍然是一個分離的頭狀態

所以,走出「分離的頭」的狀態,並恢復聯合國提交的工作:

git checkout foo 
git stash apply 

在將來,它可能更容易簡單地用這樣的工作流程提交一個主題分支您正在進行的工作:

# save your work on a topic branch 
git checkout -b myTopicBranch 
git add . 
git commit -m "wip" 

# run tests on older revision 
git checkout oldSha 
run tests... 

# ok, done, back to work 
git checkout myTopicBranch 

然後,只需合併您的工作回主一旦在topic分支完成的工作。

+0

不,不在主分支上......我的項目分支。 – raoulpetite

+0

@raoulpetite gotcha,我更新了我的答案,只使用通用分支作爲起點 –

+0

那麼,當我檢查myTopicBranch時,git告訴我「下面的未跟蹤工作樹文件將被checkout覆蓋:file_name。或者在切換分支之前刪除它們,放棄。「 – raoulpetite

0

如果你已經承諾你的underdev版本的每一個變化,你的工作樹是乾淨的,git stash只是告訴No local changes to save,在這種情況下,不添加新的藏匿。

如果你的underdev版本有一個分支名稱,只需git checkout <branch>可以帶你回去。更常用的方法是使用git reflog來查找HEAD曾經提到的以前的提交。