删除bitbucket中的最后一个提交
我犯了一个错误,我不知道如何删除我在库中的最新推送。 我拉最新的应用程序更新,但它有冲突,我把它推到知识库。
如何删除我最后一次提交? 或者如何解决它?
首先,如果您在同一个代码库中与其他人一起工作, 则不应该删除提交,因为当您在存储库上强制更新时,它将使同事的本地存储库处于非法状态(例如,如果它们在你删除的那个之后做了提交,那些提交是无效的,因为它们是基于一个现在不存在的提交)。
说,你可以做的是恢复提交。 这个过程完成不同(不同的命令),取决于你使用的CVS:
在git上 :
git revert <commit>
在mercurial上 :
hg backout <REV>
编辑:恢复操作创build一个新的提交,做了相反的回复提交(例如,如果原始提交添加一行,恢复提交删除该行),有效地删除不需要的提交的更改而不重写存储库历史。
如果你不和别人一起工作(或者很乐意让他们烦恼) ,那么可以从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
如果你想改变主分支
一般来说,master分支不是特殊的 – 这只是一个约定。 然而,bitbucket和github以及类似的网站通常需要有一个主分支(大概是因为比编写更多的代码来处理仓库没有分支的事件更容易 – 不知道)。 所以你需要创build一个新的分支,并使其成为主分支:
# 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,你应该看到你想要的历史。 您现在可以进入设置页面并将主分支更改回master
。
这个过程也可以用于其他的历史变化(例如git filter-branch
)。 在新的历史分离之前,您只需确保重置为适当的提交。
编辑 :显然你不需要去github所有这些麻烦,因为你可以强制推重置分支 。
处理恼人的合作者
下一次任何人试图从你的仓库中拉(如果他们已经拉不好提交),拉将失败。 他们将手动不得不重置到更改的历史logging之前的提交,然后再次拉。
git reset HEAD^ git pull
如果他们已经提交了错误的提交, 并提交 ,那么他们将不得不重置,然后git cherry-pick
他们想创build的良好提交,有效地重新创build整个分支没有不良提交。
如果他们从来没有拉坏坏的话,那么这整个过程就不会影响到他们,而且他们可以像平常一样拉。
你可以重置为HEAD^
然后强制推送它。
git reset HEAD^ git push -u origin master --force
它会删除最后一次提交,并将bitbucket反映为提交删除,但仍将保留在其服务器上。
我在过去曾经遇到过git回复的问题(主要是因为我不太确定它是如何工作的)。由于合并问题,我遇到了麻烦。
我简单的解决scheme是这样的
步骤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步。
请享用
一旦提交更改,将无法删除。 因为承诺的基本性质是不能删除的。
你可以做的事情(简单而安全的方法),
交互式Rebase:
1) git rebase -i HEAD~2
HEAD〜2#将显示你最近的2次提交
2)您的提交将列出,最近将出现在页面的底部LILO(Last in Last Out)
完全删除最后一个提交行
3)按ctrl+X
或ESC:wq
现在你的分支会更新,没有你最后一次提交