Delete last commit in bitbucket

I made a mistake and I don't know how to delete my latest push in the repository. I pull the latest updates of the app but it has conflicts and I push it to repository.

How to delete my last commit? Or how to fix it?

342702 次浏览

首先,如果你和其他人在同一个代码存储库上工作,你的 不应该删除了一个提交,因为当你强制更新存储库的时候,它会使你的同事的本地存储库处于非法状态(例如,如果他们在你删除了一个之后提交,那么这些提交将是无效的,因为他们是基于一个现在不存在的提交)。

Said that, what you can do is 恢复 the commit. This procedure is done differently (different commands) depending on the CVS you're using:

饭桶台:

git revert <commit>

反复无常台:

hg backout <REV>

编辑: 恢复操作创建了一个新的提交,它与恢复的提交相反(例如,如果原始提交添加了一行,恢复提交就会删除该行) ,有效地删除了不需要的提交的更改,而不需要重写存储库历史。

I've had trouble with git revert in the past (mainly because I'm not quite certain how it works.) I've had trouble reverting because of merge problems..

我的简单解决方案是这样的。

第一步。

 git clone <your repos URL> .

将您的项目放在另一个文件夹中,然后:

Step 2.

git reset --hard <the commit you wanna go to>

那么 第三步。

在您的最新(和主)项目目录(有问题的最后提交)粘贴第2步的文件

第四步。

git commit -m "Fixing the previous messy commit"

Step 5.

好好享受吧

如果您是 没有与其他人一起工作(或者乐于给他们带来重大烦恼) ,那么可以从 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 中,主分支并不特殊——它只是一种约定。然而,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 上,转到存储库设置,并将“ Main Branch”更改为 master_temp(在 Github 上,更改“ Default Branch”)。

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

This process will also work with any other history changes (e.g. git filter-branch). You just have to make sure to reset to appropriate commits, before the new history split off from the old.

编辑 : 显然你不需要在 github 上做这些麻烦的事情,因为你可以使用 force-push a reset branch

处理恼怒的合作者

下次有人试图从您的存储库中提取数据时(如果他们已经提取了错误的提交) ,提取操作将失败。他们必须在更改历史记录之前手动重置为提交,然后再次提取。

git reset HEAD^
git pull

如果他们已经拉坏提交,然后在上面做出承诺,那么他们将不得不重置,然后 git cherry-pick的好提交,他们想要创建,有效地重新创建整个分支没有坏提交。

If they never pulled the bad commit, then this whole process won't affect them, and they can pull as normal.

你可以重置到 HEAD^然后强制推它。

git reset HEAD^
git push -u origin master --force

它会删除你的上一次提交,并会在 bitbucket 上反映为提交已删除,但仍将保留在他们的服务器上。

Once changes has been committed it will not be able to delete. because commit's basic nature is not to delete.

你能做的事情(简单安全的方法) ,

交互式基底:

1) git rebase -i HEAD~2 # 将显示您最近的2次提交

2)您的提交将列出,最近将出现在页面的底部 LILO (最后一个出局)

enter image description here

Delete the last commit row entirely

3)以 ctrl+XESC:wq储存

现在您的分支将在没有最后提交的情况下更新。

现在,云 Bitbucket (我不确定是哪个版本)允许从文件系统恢复提交如下(我不知道如何从 Chrome 浏览器的 Bitbucket 界面恢复)。

- 备份整个目录以保护您无意中提交的更改

-select checked out directory

- 鼠标右键: tortoise git 菜单

- repo 浏览器(菜单选项’恢复’只会撤消未提交的更改)

按下头部按钮

- 选择最上一行(最后一次提交)

- 鼠标右键: 通过此提交恢复更改

- 在它撤消文件系统的更改后,按提交

- 此更新 GIT 的消息“恢复(您以前的消息)。此恢复提交某某”

- 选择“提交并推送”。

正如其他人所说,通常你想使用 hg backoutgit revert。然而,有时候你真的想摆脱一个提交。

First, you'll want to go to your repository's settings. Click on the Strip commits link.

Strip commits link in bitbucket settings

输入要销毁的变更集的变更集 ID,然后单击 Preview strip。这会让你在行动之前看到你将要造成的伤害。然后单击 Confirm,提交就不再是历史了。确保您告诉所有的合作者您已经做了什么,这样他们就不会意外地推迟犯错的提交。

You can write the command also for Bitbucket as mentioned by 达斯汀:

git push -f origin HEAD^:master

Note: instead of master you can use any branch. And it deletes just push on Bitbucket.

在 git 中删除上次提交的 本地:

git reset --hard HEAD~1

Here is a simple approach in up to 4 steps:

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>

Do this for as many commits as necessary.

我已经成功地使用这种方法很多次了,它需要一个团队的努力来确保一切都是同步的。

这个命令对我很管用! !

在我的例子中,我的队友用错误的代码进行了提交。所以我必须在任何情况下恢复这个提交,所以我试着

run this command to REVERT the Commit

git revert [LastCommitID]

在此之后,更改没有反映在存储库中,因此

我执行了这个命令

git push --force origin master

此命令通过删除上次提交来反映更改