我在远程存储库中有一个项目,与本地存储库(开发)和服务器存储库(prod)同步。我一直在做一些已经推送到远程和从服务器上拉出来的承诺更改。现在,我想撤销这些更改。因此,我可以在更改之前签出到提交,并提交新更改,但我猜再次将它们推到远程会有问题。我该怎么做,有什么建议吗?


当前回答

Git重置<commit_hash>(获取<commit_hash>使用Git log——oneline)

Git恢复。将所有更改的文件恢复到yout目标提交的版本

Git push origin master——force强制推到远程主分支。但如果有人和你在同一分支工作,在使用力推时要小心

其他回答

如果你按照下面给出的步骤通过Git命令行,你可以将Git本地和远程提交还原(或者你也可以称之为DELETE)。

运行以下命令查看要还原的提交id

git log --oneline --decorate --graph

你会得到如下截图

如果你也检查远程(通过Web接口),那么你可以看到这将是相同的如下所示

根据截图,目前你的提交id是e110322,但你想在本地和远程都恢复到030bbf6。

执行以下步骤删除/恢复本地+远程提交


首先本地恢复提交id 030bbf6

git reset --hard 030bbf6

紧随其后的是

git clean -f -d

这两个命令强制重置以提交阶段030bbf6,如下图所示

现在如果你跑了 git状态,然后你会看到你在远程分支中是TWO Commits BEHIND,如下所示

运行以下命令更新索引(如果有更新的话)。建议您要求所有开发人员不要接受主远程分支上的任何拉请求。

git fetch --all

一旦你完成了它,然后你需要在分支前面使用+符号强制推送这个提交,如下所示。我这里用的是主分支,你可以替换成任何分支

代码

git push -u origin +master

现在如果你看到远程的web界面,那么提交也应该被还原。

Git重置<commit_hash>(获取<commit_hash>使用Git log——oneline)

Git恢复。将所有更改的文件恢复到yout目标提交的版本

Git push origin master——force强制推到远程主分支。但如果有人和你在同一分支工作,在使用力推时要小心

你可以通过以下方法恢复单个提交:

git revert <commit_hash>

这将创建一个新的提交,该提交将恢复您指定的提交的更改。请注意,它只恢复特定的提交,而不恢复之后的提交。如果你想要还原一系列的提交,你可以这样做:

git revert <oldest_commit_hash>..<latest_commit_hash>

它将还原<oldest_commit_hash>之后直到<latest_commit_hash>的所有提交。在某些版本的git上,它还会恢复<oldest_commit_hash>,因此请仔细检查该提交是否被恢复。您总是可以使用g reset—hard HEAD~来删除最新的恢复提交(它恢复了最早的提交)。

要找出提交的哈希值,可以使用git log。

有关git revert命令的更多信息,请参阅git-revert手册页。此外,查看这个答案,了解关于恢复提交的更多信息。

重置对我来说很困难: 谢谢@Mo D Genensis和@vibs2006


git reset --hard 'your last working commit hash'

git clean -f -d

git push -f

简单方法:

git reset <commit_hash>

(您希望保留的最后一个提交的哈希值)。

您将在本地保留当前未提交的更改。

如果你想再推一次,你必须做到:

git push -f