首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >1次提交回滚本地和远程git仓库

1次提交回滚本地和远程git仓库
EN

Stack Overflow用户
提问于 2011-01-10 21:25:16
回答 15查看 132K关注 0票数 234

我已经读过关于这个主题的类似帖子,但我无论如何也想不出如何正确地做到这一点。

我检入了大约1000个我不需要的文件,我不希望通过1by1将它们全部从存储库中删除。

我有一个远程master分支。

  • 我有本地

  • 分支。

它们都在同一版本中。

我想通过1次提交回滚我的遥控器。

假设我在master上的历史是A--B--C--D--E

我想将本地回滚到D

然后将其推送到remote,这样我当前的散列将是D,既有远程的,也有本地的。

我在做这件事时遇到了问题。

我使用的是Git塔,但我对命令行很满意。有什么帮助吗?

更新:下面有很棒的评论。似乎部分不鼓励使用重置,特别是当存储库与其他用户共享时。在不使用硬重置的情况下,撤消先前提交的更改的最佳方法是什么?有什么办法吗?

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2011-01-10 21:32:54

如果还没有人拉出您的远程repo,您可以更改分支头并强制将其推送到所述远程repo:

代码语言:javascript
复制
git reset --hard HEAD^ 
git push -f 

(或者,如果您可以直接访问远程存储库,则可以更改其HEAD reference even though it is a bare repo)

请注意,正如alien-technologythe comments below中所评论的那样,在Windows (CMD session)上,您将需要^^

代码语言:javascript
复制
git reset --hard HEAD^^
git push -f 

然后呢?正如Jon Schneiderthe 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中引入)更安全。

有关说明,请参阅Schwernanswer

如果有人已经取消了回购怎么办?那我该怎么办呢?

然后我会建议一些不会重写历史的东西:

在本地恢复上一次提交(创建一个新的提交,该提交与上一次提交相反)推送由git revert.生成的“

票数 376
EN

Stack Overflow用户

发布于 2011-01-10 21:33:13

将本地分支设置为后退一个版本(HEAD^表示后退一个版本):

代码语言:javascript
复制
git reset --hard HEAD^

将更改推送到原点:

代码语言:javascript
复制
git push --force

你将不得不强制推送,因为否则git会识别出你落后于origin一次提交,并且什么都不会改变。

使用--force可以让git覆盖远程存储库中的HEAD,而不考虑那里的任何改进。

票数 63
EN

Stack Overflow用户

发布于 2013-10-31 15:41:03

如果您想还原上次提交,请听:

步骤1:

使用消息检查您的本地提交

代码语言:javascript
复制
$ git log

第2步:

删除上次提交,而不重置本地分支(或主分支)中的更改

代码语言:javascript
复制
$ git reset HEAD^

或者,如果您不希望上次提交文件和更新侦听

代码语言:javascript
复制
$ git reset HEAD^ --hard

第3步:

我们可以更新文件和代码,并再次需要强制推送,它将删除以前的提交。它将保持新提交。

代码语言:javascript
复制
$ git push origin branch -f

就这样!

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4647301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档