重置远程某个提交
我想放弃提交<commit-hash>
后完成的所有更改。 所以我做了:
git reset --hard <commit-hash>
现在我想和我的遥控器一样。 我怎样才能做到这一点? 我在<commit-hash>
之后做了一些提交(并且推送),我只想丢弃它们。 在这种情况下,事情就会变得非常糟糕 ,我不想让事情变得更糟。 (
我基本上想要我的origin/master
回滚到<commit-hash>
假设你的分支在这里和远程被称为master
,并且你的远程被称为origin
你可以这样做:
git reset --hard <commit-hash> git push -f origin master
但是,如果其他人正在使用远程存储库并已经完成了更改,则应该避免这样做。 在这种情况下,最好还原不需要的提交,然后像平常一样推送。
更新:您已经在下面解释过,其他人已经撤消了您所推送的更改,因此最好创build一个新的提交来恢复所有这些更改。 JakubNarębski在这个答案中提供了一个很好的解释。 哪一个最方便取决于你想要恢复的提交数量,以及哪个方法对你最有意义。
由于从你的问题很明显,你已经使用git reset --hard
来重置你的master
分支,你可能需要开始使用git reset --hard ORIG_HEAD
将分支移回原来的位置。 (一如git reset --hard
,确保git status
是干净的,你在右边的分支,你知道git reflog
作为一个工具来恢复显然丢失的提交。)你还应该检查ORIG_HEAD
指向正确的提交,用git show ORIG_HEAD
。
我通过这个命令解决了你的问题:
git reset --hard <commit-hash> git push -f <remote> <local branch>:<remote branch>
如果您不介意丢失本地更改,请使用其他答案。 如果您select了错误的提交哈希来返回,该方法仍然可以破坏您的远程。
如果您只想让远程匹配已经在您的本地分支中进行提交:
- 不要做任何重置。
- 使用
git log
来查找你想要的远程提交的散列。git log -p
查看更改,或者git log --graph --all --decorate
查看树。 (把最后一个作为shell的别名非常方便。) - 复制哈希。
-
运行一个命令,如:
git push --force <remote> <the-hash>:<the remote branch>
例如
git push --force origin 606fdfaa33af1844c86f4267a136d4666e576cdc:master
我的两个分钱给以前的答案:如果
git push --force <remote> <the-hash>:<the remote branch>
仍然不起作用,您可能需要编辑<your-remote-repo>.git/config
文件的接收部分:
[receive] #denyNonFastforwards = true denyNonFastforwards = false
做一件事,得到提交的SHA号。 如87c9808然后,
- 移动自己,这是你的头指定的提交(通过做git reset –hard 89cef43 //在此提及你的号码)
- 接下来在一个随机文件中进行一些更改,以便git会要求您在本地进行提交,然后进行远程提交。因此,您现在需要做的是。 应用改变之后git commit -a -m“试验提交”
- 现在通过git push origin master推送下面的提交(如果这已经在本地提交)
- 现在git会问你的是那个
错误:未能推动一些裁判' https://github.com/YOURREPOSITORY/AndroidExperiments.git '提示:更新被拒绝,因为你的当前分支的提示是后面的提示:其远程副本。 在再次推送之前集成远程更改(例如提示:'git pull …')。**
- 因此,现在你可以做的是
git push --force origin master
- 因此,我希望它的作品:)
如果你想要一个以前版本的文件,我会build议使用git checkout。
git checkout <commit-hash>
这样做会将您及时发回,不会影响您项目的当前状态,您可以来到主线git结帐主线
但是当你在参数中添加一个文件时,这个文件会从前一次被带回到你当前的项目时间,也就是说你当前的项目被改变了,需要被提交。
git checkout <commit-hash> -- file_name git add . git commit -m 'file brought from previous time' git push
这样做的好处是它不会删除历史logging,也不会恢复特定的代码更改(git revert)
点击此处查看https://www.atlassian.com/git/tutorials/undoing-changes#git-checkout