2012-06-29 100 views
4

可能重複:
Git: Revert to previous commit status我如何撤消工作空間中的某些更改並返回到最後一次提交?

我試着在我的代碼中的一些變化,但我搞砸了太多的事情(當你累了,這是從來沒有後期工作)和我只想回到我的最後一次提交。我沒有做git addgit commit和顯然如果我做git pull一切都是最新的。

我認爲git checkout是我需要的,但它沒有奏效..任何幫助?

+0

rebase與此無關。 –

+0

git rebase --hard HEAD? – uday

回答

8

提及reset --hard的答案會做你想做的事(以及其他一些你可能會或可能不會做的事情),但是你認爲checkout是你需要的命令是正確的。問題是,checkout做兩個不同的東西,所以你需要一個路徑參數爲它供給:

git checkout .

從庫的根會做你就好了。

+0

除非問題是新添加未跟蹤文件,但聽起來OP似乎遇到了*更改*超過*添加*的問題。 – blahdiblah

+0

嗯,我也做了一個補充,但我剛剛刪除了該文件。幸運的是小項目!順便說一下,命令做到了!我會接受你的回答,但是你能否告訴我'重設''重設'和'結帳'之間的區別?我只知道'藏匿'會像一個不同的本地分支,以後你可以決定保留或不保留(或類似的東西)。 – Enrichman

+1

'reset'是一個主要對* index *進行操作的命令,可以通過一些附加標誌('--hard'就是其中之一)在工作目錄上進行操作。 'checkout'是一個在您的工作目錄上運行的命令,可以通過檢出樹的內容或更新一組本地路徑(不接觸索引)。 'rebase'是一種重寫你的提交歷史的一部分(作爲一系列補丁)以將其應用於不同的基礎(它與你的問題沒有任何關係)。 –

1

git reset --hard這將刪除所有未追蹤的更改以便上次在存儲庫中落實。對要恢復的一些變化起飛的機會

​​

1

git reset --hard將放棄所有的工作,但你可能想要做的。

4

不要git reset -hard這是永恆的!

請使用

git stash -u 

,而不是!如果你在那裏有一塊工作不慎發生,你仍然可以恢復。除非您選擇這樣做,否則將永遠不會推送到您的遙控器,方法是將其從分支中取出並推出。

此外,你在正確的軌道上,你可以使用git checkout來完成同樣的事情。語法是git checkout HEAD -- .。但它有與git reset --hard相同的問題。堅持藏匿,你將會挽救未來失去你的頭髮。

再回應

上述解決方案恢復所有的更改。但是,你問如何擺脫的一些的變化。我會補充完整性。

要做到這一點,你可以

git add file1 file2 file3 
git stash save --patch 

現在將提示正是你想要做什麼dissappear ...下來什麼都粒度級別的。因此,如果您選擇這樣做,您可以安全地「拒絕」對單個文件的少量更改。

+0

這不是-1 O的原因,他要求永久刪除它。現在我同意git存儲更好。再次應用更改'git stash apply' – Hassek

+1

@亞當,哈哈! -1我認爲所有其他答案都不好,因爲他提到了任何永久或暫時的變化。 ;)他剛纔提到回到以前的提交,他們在這個意義上是正確的。乾杯!! – uday

+1

只是澄清一點:'重置 - 哈哈是永久性的,但它不會觸及未跟蹤的文件('stash -u'明確保存) - 所以你不會失去*重置 - 硬'在任何情況下。 –

相關問題