2013-03-10 49 views
9

這是我想要做的。我想回到2次提交之前,將那個提交中改變的文件作爲一個新的提交也許。但我不想失去我最後的承諾。我的最後一次提交在代碼中存在一些錯誤,但我現在想保留那一個。如何返回上一次提交而不會丟失Git中的最後提交?

我閱讀了一些文檔,但沒有清楚說明當您重置您的頭時會發生什麼。例如,你是否失去了所有的提交,直到你重置(落後)的提交?

我想了解所有這些如何工作,但我對git revertresetcheckout命令感到困惑。

我意識到我應該隱藏最後一次提交而不是提交,但這是目前的另一個故事。

+1

你可以更具體一點你想做什麼?你想撤銷之前的提交嗎?或者你想保留這兩個提交所做的大部分更改,除了幾個文件? – jszakmeister 2013-03-10 23:37:19

+0

jszakmeister,我不想擺脫任何提交。我想保持我過去的歷史不變。我只想在之前將2次提交作爲一個新的工作階段,我猜。 – 2013-03-10 23:40:43

+0

目前還不清楚「帶回」是什麼意思。 – wRAR 2013-03-10 23:41:14

回答

9

revert進行一次新的提交,恢復較舊提交所做的更改。 reset --hard將當前分支的HEAD更改爲指定的提交。 checkout將工作副本切換到指定的分支或提交。

當您將分支重置爲較早的提交時,如果新提交不是其他分支或標籤的祖先(儘管它們仍可通過reflog訪問),則較新的提交會丟失。我們不清楚你需要做什麼,最可能的解決方案是revert(以完全恢復一個較舊的提交或一系列提交)和rebase -i(以更改較舊的提交或將其從歷史記錄中刪除)。

+0

'git revert'具有強烈的含義,因爲它創建了一個否定先前提交更改的提交。除非您確定自己的意圖,否則在使用時請小心。 – LopSae 2013-03-12 01:05:19

+0

@LopSae創建的提交沒有發佈,所以你可以很容易地刪除它,如果它做了你不想要的東西。重置和重建是更加危險的命令,因爲從錯誤中恢復更加困難。 – wRAR 2013-03-12 12:05:23

+0

嗨,@ wRAR。當我退回到前一個提交時,在那之後,當我使用git log查看提交歷史記錄時,我切換回提交後的所有記錄都丟失了。如何解決這個問題?我的意思是在結賬到之前的提交後查看完整的提交歷史記錄。 – Mario 2014-03-02 03:50:28

10

如果你想回去,說2先前提交,你可以做git checkout HEAD~2。這會讓你像現在這樣。如果你在分支mastergit checkout master將帶你回到現在。但是,如果您想保持當前狀態,但在那裏啓動一個新的開發分支,那麼git checkout -b HEAD~2將在那裏開始一個新的分支。如果你想倒回主,但不是鬆散你目前的,未完成/破碎的工作,做

git branch wip   # New branch ends a current tip 
git reset --hard HEAD~2 # Old branch rewound, get files from then 
相關問題