我想丢弃提交后完成的所有更改<commit-hash>
.所以我做了:
git reset --hard <commit-hash>
Run Code Online (Sandbox Code Playgroud)
现在我想对我的遥控器做同样的事情.我怎样才能做到这一点?之后我做了一些提交(并推送)<commit-hash>
,我只想丢弃它们.只是在某种程度上出现了严重的错误,我不想让它变得更糟.(
我基本上要退我origin/master
来<commit-hash>
Mar*_*air 1124
假设您的分支master
在此处和远程调用,并且您的远程调用origin
您可以执行以下操作:
git reset --hard <commit-hash>
git push -f origin master
Run Code Online (Sandbox Code Playgroud)
但是,如果其他人正在使用您的远程存储库并已撤消您的更改,则应避免执行此操作.在这种情况下,最好还原您不想要的提交,然后正常推送.
更新:您已经在下面解释过,其他人已经推动了您推送的更改,因此最好创建一个新的提交,以恢复所有这些更改.在JakubNarębski的回答中,您可以选择这样做.哪一个最方便取决于您想要还原的提交数量,以及哪种方法对您最有意义.
由于您的问题很明显,您已经习惯git reset --hard
重置master
分支,因此您可能需要git reset --hard ORIG_HEAD
先将分支移回原来的位置.(与往常一样git reset --hard
,确保它git status
是干净的,你是在正确的分支上,并且你知道git reflog
作为恢复明显丢失的提交的工具.)你还应该检查ORIG_HEAD
点到正确的提交,用git show ORIG_HEAD
.
Wal*_*alf 112
如果您不介意丢失本地更改,请使用其他答案.如果您选择错误的提交哈希返回,此方法仍然可以破坏您的远程.
如果您只想使远程匹配成为已在本地分支中的提交:
git log
找到你想要的遥远,在提交的哈希值.git log -p
看到变化,或git log --graph --all --oneline --decorate
看到一个紧凑的树.(将最后一个作为shell中的别名非常方便.)运行如下命令:
git push --force <remote> <commit-ish>:<the remote branch>
Run Code Online (Sandbox Code Playgroud)
例如
git push --force origin 606fdfaa33af1844c86f4267a136d4666e576cdc:master
Run Code Online (Sandbox Code Playgroud)Ibr*_*tov 60
我用这个命令解决了你的问题:
git reset --hard <commit-hash>
git push -f <remote> <local branch>:<remote branch>
Run Code Online (Sandbox Code Playgroud)
小智 17
我最近遇到了同样的问题,通过两个步骤解决了:
git reset --hard HEAD~1
HEAD~1 是最近的提交。git push -f origin main
。就是这样。
Ble*_*ing 11
假设您的分支在本地和远程都称为masterremote
,并且您的分支称为origin,您可以执行以下操作:
git reflog
要获取所有提交历史记录,您的commit hash
格式如下:e34e1ff
git reset --hard <commit-hash>
git push -f origin master
Run Code Online (Sandbox Code Playgroud)
dud*_*aus 10
在GitLab上,您可能必须先将分支设置为不受保护的状态。您可以在[repo]>设置>存储库>受保护的分支中执行此操作。然后,马克回答的方法起作用。
git reset --hard <commit-hash>
git push -f origin master
Run Code Online (Sandbox Code Playgroud)
如果您想要文件的早期版本,建议使用git checkout。
git checkout <commit-hash>
Run Code Online (Sandbox Code Playgroud)
这样做将使您及时返回,不会影响您项目的当前状态,您可以进入主线git checkout mainline
但是,当您在自变量中添加文件时,该文件会从前一个时间带回到您当前的项目时间,即,您当前的项目已更改,需要提交。
git checkout <commit-hash> -- file_name
git add .
git commit -m 'file brought from previous time'
git push
Run Code Online (Sandbox Code Playgroud)
这样做的好处是它不会删除历史记录,也不会还原特定的代码更改(git revert)
在此处查看更多信息https://www.atlassian.com/git/tutorials/undoing-changes#git-checkout
我对前一个答案的两分钱:如果
git push --force <remote> <the-hash>:<the remote branch>
Run Code Online (Sandbox Code Playgroud)
仍然不起作用,您可能想要编辑<your-remote-repo>.git/config
文件的接收部分:
[receive]
#denyNonFastforwards = true
denyNonFastforwards = false
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
455374 次 |
最近记录: |