2012-02-17 58 views
11

我正在編程。我添加漂亮的代碼並提交併將其推送到我的回購中,例如:Git:如何回滾到上次推/提交

git add * 
git commit 
//writes message 
git push unfuddle master 

現在我進去把所有東西都搞砸了。自推美以來,我還沒有發佈git命令。我如何讓我的本地文件返回到提交的內容?

git pull說我的本地回購是「最新的」

git checkout修建垃圾了我的屏幕,似乎沒有任何改變。

要清楚:我不是試圖修改我的遠程回購,只是讓我的本地回購看起來像服務器。

我目前的解決方案是刪除該文件夾並reclone回購。這是不對的。

回答

13

可以重置到HEAD:git reset --hard HEAD

+0

'git stash'我找到了也做我想要的。 – Mikey 2012-08-13 17:17:05

+1

當然,你也可以使用你最後的硬盤備份來達到:) – three 2012-08-13 21:04:16

1

你嘗試git checkout -f master

7

UPDATE:

做到這一點,最好的辦法是

git stash -u 

不要

git reset --hard HEAD 

它是不能被撤消的操作,你可以真正核彈攻擊你的工作,除非你在Mac上使用時間機器或在Windows 8上使用新的備份服務.Linux可能有這樣的方案,儘管我不使用它。

如果你也想被忽略的文件核爆,你可以

git clean -xdf 
0

如果你沒有犯了什麼,你可以簡單地做一個$ git reset --hard。如果你犯了一些東西,你可以做一個git reset --hard origin/master回到遠程版本。

3

混帳拉說我的本地回購是「最新的」

git pull告訴你你的資料庫是最新的,因爲你的本地庫和遠程存儲庫都指向同一個HEAD(中上次提交)。這是由於您的git push,它將遠程與您的本地存儲庫同步。

Git不會比較在決定要拖動哪些內容時尚未提交給遠程分支的更改;因此,從控釋片的角度來看,您當地遠程庫是在同一時間點,即使你當地庫具有不分階段的變化(你有沒有git add版的變化)。

有上this page下一個漂亮的圖,它顯示了你的過程是如何工作的 - 你做一些修改,將它們暫存(運行git add),然後最終將其提交給信息庫(通過創造性地命名git commit)。

要清楚:我不是試圖修改我的遠程回購,只是讓我的本地回購看起來像服務器。

其他人所指出的方法來做到這一點: git reset --hard HEAD(重置索引[上演文件]和工作樹[未分級的文件]上次提交),但它是值得擁有的東西,你的理解」重新嘗試實現 - 如果我知道如何 git跟蹤我的文件第一次我搞亂了我的工作樹,我已經節省了數小時的煩惱。

2

既然你有沒有犯任何東西,下面的命令將重置修改過的文件:

git checkout . 
2

你可以嘗試

git stash 
git pull origin your-branch 
0

git checkout branchname git reset --hard c4e0424 git push origin +branchname

您可以使用--soft而不是--hard
--hard您將失去您的更改
--soft保留提交的更改文件