首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >撤消更改(已完成和推送)

撤消更改(已完成和推送)
EN

Stack Overflow用户
提问于 2015-04-01 16:29:13
回答 1查看 758关注 0票数 1

我已经完成了两项承诺。我需要将代码返回到“两次提交前”。

我可以使用git reset --hard <hash>在本地执行此操作,但无法推动此更改:

提示:由于当前分支的提示已经落后,更新被拒绝。

如何将代码返回到中央存储库中的以前提交?

更新:

代码语言:javascript
复制
ms-app-actual/mobile-application » git reset --hard e50fa38c4865bd82fce7ddcf1e05d94012266364   ‹master›
HEAD is now at e50fa38 Move Attachment class to separate Project
  ms-app-actual/mobile-application » git push --force                                            ‹master›
Total 0 (delta 0), reused 0 (delta 0)
remote: GitLab: You don't have permission
To ssh://git@aaa.bb.cc.dd:2222/ms-mobile-app/mobile-application.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'ssh://git@aaa.bb.cc.dd:2222/ms-mobile-app/mobile-application.git'

但我可以拉:

代码语言:javascript
复制
ms-app-actual/mobile-application » git pull                                                    ‹master›
Updating e50fa38..cebcabf
Fast-forward

做出普通的承诺。

我在用Gitlab。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-01 16:43:44

执行git reset --hard并强制推送更改将删除提交。然而,你需要小心做这件事。如果其他人已经撤回了您的更改,这将导致他们的历史问题。似乎Gitlab在阻止你这么做。

最好的方法是创建一个新的提交,取消更改并推动它。这样,任何拉着手的人都不会在更改中合并任何问题。有几种方法可以做到这一点。

1)创建两个还原提交,并将它们重基为一个

代码语言:javascript
复制
git revert <sha of commit 1>
git revert <sha of commit 2>
git rebase -i <sha of commit is in good state>
//Squash the two revert commits into one
git push

2)从好的提交中检出所有已更改的文件,并提交这些更改

代码语言:javascript
复制
git diff --name-only HEAD..HEAD~3 | xargs git checkout HEAD~3 -- 
//This should result in all the files modified in the two commits being changed.
git commit -am "Reverting changes from commits"
git push

这两种解决方案基本上都会产生相同的结果。一个新的提交与您在两个不想要的更改中所做的更改相反。这是撤消被推送到远程存储库的更改的最安全方法。

经验法则是:一旦将更改推送到远程存储库,您应该认为它们是永久性的。

因为您还尝试执行reset --hard,所以为了获得提交,您可以撤销它们。您所需要做的就是git pull

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

https://stackoverflow.com/questions/29396065

复制
相关文章

相似问题

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