我已经完成了两项承诺。我需要将代码返回到“两次提交前”。
我可以使用git reset --hard <hash>在本地执行此操作,但无法推动此更改:
提示:由于当前分支的提示已经落后,更新被拒绝。
如何将代码返回到中央存储库中的以前提交?
更新:
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'但我可以拉:
ms-app-actual/mobile-application » git pull ‹master›
Updating e50fa38..cebcabf
Fast-forward做出普通的承诺。
我在用Gitlab。
发布于 2015-04-01 16:43:44
执行git reset --hard并强制推送更改将删除提交。然而,你需要小心做这件事。如果其他人已经撤回了您的更改,这将导致他们的历史问题。似乎Gitlab在阻止你这么做。
最好的方法是创建一个新的提交,取消更改并推动它。这样,任何拉着手的人都不会在更改中合并任何问题。有几种方法可以做到这一点。
1)创建两个还原提交,并将它们重基为一个
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 push2)从好的提交中检出所有已更改的文件,并提交这些更改
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。
https://stackoverflow.com/questions/29396065
复制相似问题