我犯了一个错误,我不知道如何删除我在存储库中的最新推送。我拉取了应用程序的最新更新,但它有冲突,我将它推送到存储库。
如何删除我的最后一次提交?或者如何解决?
我犯了一个错误,我不知道如何删除我在存储库中的最新推送。我拉取了应用程序的最新更新,但它有冲突,我将它推送到存储库。
如何删除我的最后一次提交?或者如何解决?
首先,如果您与其他人在同一个代码存储库上工作,则不应删除提交,因为当您强制对存储库进行更新时,它将使您同事的本地存储库处于非法状态(例如,如果他们在您删除的提交之后进行提交,这些提交将无效,因为它们基于现在不存在的提交)。
就是说,您可以做的是还原提交。根据您使用的 CVS,此过程的执行方式不同(不同的命令):
在git上:
git revert <commit>
在mercurial上:
hg backout <REV>
编辑: 还原操作创建一个与还原提交相反的新提交(例如,如果原始提交添加了一行,则还原提交删除该行),有效地删除了不需要的提交的更改,而无需重写存储库历史记录。
如果您不与其他人一起工作(或者很乐意给他们带来很大的烦恼),那么可以从 bitbucket 分支中删除提交。
git reset HEAD^ # remove the last commit from the branch history
git push origin :branch_name # delete the branch from bitbucket
git push origin branch_name # push the branch back up again, without the last commit
一般来说,在 git 中,master 分支并不特殊——它只是一个约定。但是,bitbucket 和 github 以及类似的站点通常需要有一个主分支(大概是因为它比编写更多代码来处理存储库没有分支的事件更容易 - 不确定)。因此,您需要创建一个新分支,并将其设为主分支:
# on master:
git checkout -b master_temp
git reset HEAD^ # undo the bad commit on master_temp
git push origin master_temp # push the new master to Bitbucket
在 Bitbucket 上,转到存储库设置,并将“主分支”更改为master_temp
(在 Github 上,更改“默认分支”)。
git push origin :master # delete the original master branch from Bitbucket
git checkout master
git reset master_temp # reset master to master_temp (removing the bad commit)
git push origin master # re-upload master to bitbucket
现在转到 Bitbucket,您应该会看到您想要的历史记录。您现在可以转到设置页面并将 Main 分支更改回master
.
此过程也适用于任何其他历史更改(例如git filter-branch
)。在新历史与旧历史分离之前,您只需确保重置为适当的提交。
编辑:显然你不需要去 github 上的所有这些麻烦,因为你可以强制推送一个重置分支。
下次有人尝试从您的存储库中拉取时(如果他们已经拉取了错误的提交),拉取将失败。他们必须在更改历史记录之前手动重置为提交,然后再次拉取。
git reset HEAD^
git pull
如果他们拉出了错误的提交,并在它之上提交,那么他们将不得不重置,然后git cherry-pick
他们想要创建的好的提交,有效地重新创建整个分支而没有错误的提交。
如果他们从未拉过错误的提交,那么整个过程不会影响他们,他们可以正常拉动。
你可以重置HEAD^
然后强制推动它。
git reset HEAD^
git push -u origin master --force
它将删除您的最后一次提交,并将在 bitbucket 上反映为提交已删除,但仍将保留在其服务器上。
这是一个最多 4 个步骤的简单方法:
0 - 建议您要修复存储库的团队
与团队联系,让他们知道即将发生的变化。
1 - 删除最后一次提交
假设您的目标分支是master
:
$ git checkout master # move to the target branch
$ git reset --hard HEAD^ # remove the last commit
$ git push -f # push to fix the remote
如果你是一个人工作,此时你就完成了。
2 - 修复队友的本地存储库
在你队友的:
$ git checkout master # move to the target branch
$ git fetch # update the local references but do not merge
$ git reset --hard origin/master # match the newly fetched remote state
如果你的队友没有新的提交,你就完成了,你应该同步。
3 - 恢复丢失的提交
假设一个队友有一个新的未发布的提交在这个过程中丢失了。
$ git reflog # find the new commit hash
$ git cherry-pick <commit_hash>
根据需要对尽可能多的提交执行此操作。
我已经多次成功地使用过这种方法。它需要团队的努力来确保一切都是同步的。
就我而言,我的队友使用错误的代码完成了提交。所以无论如何我都必须恢复那个提交,所以我试图
运行此命令以 REVERT 提交
git revert [LastCommitID]
在此之后,更改未反映在存储库中,因此
我执行了这个命令
git push --force origin master
并且此命令通过删除最后一次提交来反映更改
我过去在使用 git revert 时遇到过麻烦(主要是因为我不太确定它是如何工作的。)由于合并问题,我在还原时遇到了麻烦..
我的简单解决方案是这样的。
步骤1。
git clone <your repos URL> .
您的项目在另一个文件夹中,然后:
第2步。
git reset --hard <the commit you wanna go to>
然后步骤 3。
在您的最新(和主要)项目目录(最后一次提交有问题的目录)中粘贴步骤 2 的文件
第4步。
git commit -m "Fixing the previous messy commit"
步骤 5。
享受
到目前为止,cloud bitbucket(我不确定哪个版本)允许从文件系统恢复提交,如下所示(我看不到如何从 Chrome 浏览器中的 Bitbucket 界面恢复)。
-备份您的整个目录以保护您无意中提交的更改
-选择签出目录
- 鼠标右键:乌龟 git 菜单
-repo-browser(菜单选项“revert”仅撤消未提交的更改)
- 按下 HEAD 按钮
-选择最上面一行(最后一次提交)
- 鼠标右键:通过此提交恢复更改
-在它撤消文件系统上的更改后,按提交
- 这会更新 GIT 并显示一条消息“恢复(您之前的消息)。这会恢复提交某某'
- 选择“提交并推送”。