2013-07-03 287 views
2

我想撤消我對本地回購和Github上的回購文件所做的最後更改。 (origin撤消git上次提交推送

有人可以請我指向一個職位/博客做這件事。

這裏是我做了提交更改的步驟:無論在我的本地回購和起源

git add -A 
git commit -m "changed header" 
git push origin master 

我怎樣才能撤消上次的變化。

回答

4
  1. 做一個硬復位拋出了不好的承諾:

    git reset --hard HEAD^ 
    
  2. 力推

    git push -f origin master 
    

注:reset --hard是要扔掉的任何改變你在最近的提交中進行,除非你仍然有一個分支保持對該提交的引用。不過,前面的HEAD仍然會在reflog中,以防短期內需要它。是非常安全的,做一個備份支路的第一:

git branch backup master 

如果一切順利的話,你可以git branch -D backup以後。

+1

這應該與一個關於丟失數據的大紅色警告來。 –

+0

雖然這看起來就是OP所要的。我會添加一些要清楚的。 –

+0

@MattBall:丟失數據?我只是在這個提交中改變了一行,我想撤消。我希望該行能夠恢復到以前的狀態,而不會發生任何其他事情。 –

0

我寧願做git revert HEAD,git push origin master,除非有充分理由使用reset

1

不推薦修改已經推送的提交或遠程分支的歷史記錄。如果你這樣做,你可能會搞砸其他人的工作,或者至少使他們更難將其工作集成到遠程分支(在這種情況下爲origin/master)。

一種撤消你所承諾的而不是玩origin/master的歷史的方式是通過創建一個新的提交來解除你以前所做的,然後推送新的提交。

首先,創建一個包含你過去所做的更改相反提交補丁:

git diff HEAD HEAD~1 > revert.patch

通過發佈命令你告訴Git的創建描述如何得到一個補丁文件從HEAD到HEAD_1(即:到最後一次提交的前一個到最後一個提交)。

然後,您應用補丁:

git apply revert.patch

將應用這個補丁並修改你的工作副本中的文件。您現在可以刪除修補程序文件(revert.patch)。

現在您的工作副本已恢復到上次提交之前的狀態,但這些更改尚未進入Git回購。您必須添加並提交它們。 (使用git guigit add/git commit或者您通常用於提交更改的任何方法)。

一旦你新的提交已經產生,只要它推

git push origin master

現在你將有

A' (master) - (origin/master) 
| 
B 
| 
A 

哪裏A'是新提交您生成,包含相同的文件作爲提交你想恢復到(A