如何从分支历史记录中删除提交?我应该使用git reset-hard HEAD吗?
当前回答
#[快速回答]
您有许多选择,例如:
备选方案1:git rebase-i<YourCommitId>~1将YourCommitId更改为要还原回的提交次数。备选方案2:git reset--硬YourCommitIdgit push<origin><branch>--force将YourCommitId更改为要还原回的提交次数。我不建议使用此选项,因为您可能会丢失正在进行的工作。备选方案3:git reset—软HEAD~1你可以保留你的工作,只撤销承诺。
其他回答
如果您没有发布更改,为了删除最新提交,您可以
$ git reset --hard HEAD^
(注意,这也会删除所有未提交的更改;请小心使用)。
如果您已经发布要删除的提交,请使用git-restore
$ git revert HEAD
我已经推了。需要远程返回一些提交。尝试了许多变化,但只有Justin via git bush的这句话对我来说很好:
git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force
这是另一种方法:
签出要还原的分支,然后将本地工作副本重置为远程服务器上最新的提交(之后的所有内容都将再见)。为此,在SourceTree中,我右键单击并选择“Reset BRANCHNAME To this commit”。我认为命令行是:
git reset --hard COMMIT_ID
因为您刚刚从远程签出了分支,所以您不会担心丢失任何本地更改。但如果你这样做,这将失去他们。
然后导航到存储库的本地目录并运行以下命令:
git -c diff.mnemonicprefix=false -c core.quotepath=false \
push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME
这将删除本地存储库中当前提交之后的所有提交,但仅限于该分支。
如果您还没有将提交推到任何位置,可以使用gitrebase-i删除该提交。首先,找出提交的时间(大约)有多远。然后执行以下操作:
git rebase -i HEAD~N
~N表示对最后N个提交进行重新基化(N必须是一个数字,例如HEAD~10)。然后,您可以编辑Git提供给您的文件,以删除违规提交。保存该文件后,Git将重写以下所有提交,就像您删除的提交不存在一样。
GitBook中有一个很好的部分,用图片和示例来改变基础。
但是要小心,因为如果你改变了你在其他地方推动的东西,除非你计划进行强制推动,否则需要另一种方法。
错误:
我git rebase-I--root'ed我的分支,无知地认为我可以重新编写与主提交不同的第一个提交(GitHub for Windows默认视图是与主提交的比较,隐藏了它的全部)。
我留着硅谷的胡子,而900多个会员加入了Sublime。退出时,没有任何变化,我给电池充电,然后开始刮胡子,因为所有900多个人的提交都是无意识地重新启动的-将他们的提交时间重置为现在。
为了击败Git并保持原始时间,我删除了本地存储库并从远程重新克隆。
现在,它重新添加了一个最新的不需要的承诺,我希望删除,所以继续这样做。
用尽所有选项:
我不希望git-restore——它会创建一个额外的提交,让git占据上风。
git reset-hard HEAD什么都没做,在检查了reflog之后,最后一个也是唯一一个HEAD是克隆-git获胜。
为了获得最新的SHA,我查看了github.com上的远程存储库-小赢。
在认为git-reset--hard<SHA>有效后,我将另一个分支更新为master和1…2…poof!提交回来了-Git赢了。
正在检查返回到master,是时候尝试git-rebase-i<SHA>了,然后删除该行。。。没用,很遗憾地说。“如果您删除此处的一行,承诺将丢失”。啊。。。在2.8.3发行说明中,对新功能troll n00b进行了粉饰。
解决方案:
git-rebase-i<SHA>然后d,drop=删除提交。
为了验证,我检查了另一个分支,瞧,没有隐藏的承诺从主节点获取/拉取。
https://twitter.com/holman/status/706006896273063936
祝你今天愉快。
推荐文章
- 当我试图推到原点时,为什么Git告诉我“没有这样的远程‘原点’”?
- 如何从远程分支中挑选?
- 如何查看一个分支中的哪些提交不在另一个分支中?
- 如何取消在github上的拉请求?
- HEAD和master的区别
- GIT克隆在windows中跨本地文件系统回购
- RPC失败;卷度传输已关闭,剩余未完成的读取数据
- 我应该在.gitignore文件中添加Django迁移文件吗?
- 错误:您对以下文件的本地更改将被签出覆盖
- Git rebase—即使所有合并冲突都已解决,仍然会继续报错
- 在Git中,我如何知道我的当前版本是什么?
- 跟踪所有远程git分支作为本地分支
- 自定义SSH端口上的Git
- git如何显示不存在于.gitignore中的未跟踪文件
- Git错误:遇到7个文件应该是指针,但不是