删除bitbucket中的最后一次提交

时间:2013-02-12 16:07:52

标签: repository bitbucket

我犯了一个错误,我不知道如何删除我在存储库中的最新推送。我提取应用程序的最新更新,但它有冲突,我把它推送到存储库。

如何删除我的上次提交?或者如何解决它?

10 个答案:

答案 0 :(得分:91)

如果您与他人合作(或者很乐意让他们感到非常烦恼),那么可以从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,你应该看到你想要的历史。您现在可以转到设置页面并将主分支更改回master

此过程也适用于任何其他历史记录更改(例如git filter-branch)。您必须确保在新历史记录与旧历史记录分离之前重置为适当的提交。

编辑 :显然你不需要在github上解决所有这些麻烦,因为你可以force-push a reset branch

处理恼火的合作者

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

git reset HEAD^
git pull

如果他们已经提取了错误的提交,并在其上提交,那么他们将不得不重置,然后git cherry-pick他们想要创建的好提交,有效地重新提交 - 在没有错误提交的情况下创建整个分支。

如果他们从未提取错误提交,那么整个过程不会影响他们,他们可以正常拉动。

答案 1 :(得分:89)

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

说,你可以做的是恢复提交。此过程以不同的方式完成(不同的命令),具体取决于您使用的CVS:

git上:

git revert <commit>

mercurial上:

hg backout <REV>

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

答案 2 :(得分:41)

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

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

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

答案 3 :(得分:3)

我过去遇到过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步。

享受

答案 4 :(得分:1)

这是一种简单的方法,最多需要四个步骤:

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>

请根据需要执行多次提交。

我已经成功地多次使用了这种方法。需要团队合作以确保所有内容都同步。

答案 5 :(得分:0)

提交更改后,将无法删除。因为提交的基本性质不是删除。

你能做什么(简单安全的方法),

互动重建:

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

2)你的提交将列出如下,最近将显示在页面底部的LILO(最后一个在Last Out中)

enter image description here

完全删除最后一个提交行

3)按ctrl+XESC:wq

保存

现在您的分支机构将在没有您上次提交的情况下进行更新..

答案 6 :(得分:0)

正如其他人所说,通常您想使用hg backoutgit revert。但是,有时候您真的想摆脱提交。

首先,您需要转到存储库的设置。单击Strip commits链接。

Strip commits link in bitbucket settings

输入要销毁的变更集的变更集ID,然后单击Preview strip。这样一来,您就可以在执行操作之前先了解将要遭受的损害。然后只需单击Confirm,您的提交将不再是历史记录。确保告诉所有协作者您做了什么,以免他们误将有问题的提交推回去。

答案 7 :(得分:0)

您也可以如Dustin所述为Bitbucket编写命令:

git push -f origin HEAD^:master
  

注意:除了master之外,您还可以使用任何分支。   并删除它,只需按下Bitbucket。

要删除git中的最后一次提交locally,请使用:

git reset --hard HEAD~1

答案 8 :(得分:0)

这个命令对我来说效果很好!!

就我而言,我的队友提交了错误的代码。所以无论如何我都必须恢复那个提交,所以我试着

<块引用>

运行这个命令来恢复提交

git revert [LastCommitID]

此后,更改未反映在存储库中,因此

<块引用>

我执行了这个命令

git push --force origin master

并且此命令通过删除最后一次提交来反映更改

答案 9 :(得分:-2)

到目前为止,云bitbucket(我不确定哪个版本)允许从文件系统恢复提交,如下所示(我没有看到如何从Chrome浏览器中的Bitbucket界面恢复)。

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

- 选择签出目录

- 鼠标右键:togise git menu

-repo-browser(菜单选项&#39;还原&#39;仅撤消未经修改的更改)

- 按下HEAD按钮

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

- 鼠标右键:通过此提交还原更改

- 在取消文件系统上的更改后,按提交

- 这会通过消息&#39;还原(您之前的消息)更新GIT。这会某某恢复提交&#39;

- 选择&#39;提交并推送&#39;。