2013-07-03 248 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