我已经读过关于这个主题的类似帖子,但我无论如何也想不出如何正确地做到这一点。
我检入了大约1000个我不需要的文件,我不希望通过1by1将它们全部从存储库中删除。
我有一个远程master
分支。
它们都在同一版本中。
我想通过1次提交回滚我的遥控器。
假设我在master
上的历史是A--B--C--D--E
。
我想将本地回滚到D
。
然后将其推送到remote,这样我当前的散列将是D,既有远程的,也有本地的。
我在做这件事时遇到了问题。
我使用的是Git塔,但我对命令行很满意。有什么帮助吗?
更新:下面有很棒的评论。似乎部分不鼓励使用重置,特别是当存储库与其他用户共享时。在不使用硬重置的情况下,撤消先前提交的更改的最佳方法是什么?有什么办法吗?
发布于 2011-01-10 21:32:54
如果还没有人拉出您的远程repo,您可以更改分支头并强制将其推送到所述远程repo:
git reset --hard HEAD^
git push -f
(或者,如果您可以直接访问远程存储库,则可以更改其HEAD reference even though it is a bare repo)
请注意,正如alien-technology在the comments below中所评论的那样,在Windows (CMD session)上,您将需要^^
git reset --hard HEAD^^
git push -f
然后呢?正如Jon Schneider在the comments中指出的那样
如果带有"
HEAD^
“的命令导致error no matches found: HEAD^
,请参见"git show HEAD^
doesn't seem to be working. Is this normal?”
自2011年以来的更新:
使用git push --force-with-lease
(that I present here,2013年在Git1.8.5中引入)更安全。
如果有人已经取消了回购怎么办?那我该怎么办呢?
然后我会建议一些不会重写历史的东西:
在本地恢复上一次提交(创建一个新的提交,该提交与上一次提交相反)推送由git revert
.生成的“
发布于 2011-01-10 21:33:13
将本地分支设置为后退一个版本(HEAD^
表示后退一个版本):
git reset --hard HEAD^
将更改推送到原点:
git push --force
你将不得不强制推送,因为否则git会识别出你落后于origin
一次提交,并且什么都不会改变。
使用--force
可以让git覆盖远程存储库中的HEAD
,而不考虑那里的任何改进。
发布于 2013-10-31 15:41:03
如果您想还原上次提交,请听:
步骤1:
使用消息检查您的本地提交
$ git log
第2步:
删除上次提交,而不重置本地分支(或主分支)中的更改
$ git reset HEAD^
或者,如果您不希望上次提交文件和更新侦听
$ git reset HEAD^ --hard
第3步:
我们可以更新文件和代码,并再次需要强制推送,它将删除以前的提交。它将保持新提交。
$ git push origin branch -f
就这样!
https://stackoverflow.com/questions/4647301
复制相似问题