如何从分支历史记录中删除提交?我应该使用git reset-hard HEAD吗?
当前回答
在我的情况下,我对这只小狗的魔法代码是这样的:
git reset --hard @{u}
测试一下,告诉我。我试过几种不同的方法,但只有这一种对我有帮助。
其他回答
我已经推了。需要远程返回一些提交。尝试了许多变化,但只有Justin via git bush的这句话对我来说很好:
git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force
上面的所有命令都会像提交之前一样恢复工作树和索引的状态,但不会恢复存储库的状态。如果您查看它,“已删除”提交实际上并没有被删除,它根本不是当前分支顶端的提交。
我认为没有办法用瓷命令删除提交。唯一的方法是从日志和reflog中删除它,然后执行git prune--expire-now。
小心:git reset-hard将删除您的工作目录更改。在运行此命令之前,请确保隐藏所有要保留的本地更改。
假设您正在执行该提交,则此命令将使其变得古怪。。。
git reset --hard HEAD~1
HEAD~1表示在HEAD之前提交。
或者,您可以查看gitlog的输出,找到要备份的提交的提交id,然后执行以下操作:
git reset --hard <sha1-commit-id>
如果你已经推了它,你需要用力推才能摆脱它。。。
git push origin HEAD --force
然而,如果其他人已经成功了,那么你最好开始一个新的分支。因为当他们拉动时,它会将其合并到他们的工作中,你会再次将其推高。
如果您已经推送了,那么最好使用git-restore创建一个“镜像”提交,以撤消更改。但是,这两个提交都将在日志中。
仅供参考——git reset——如果你想摆脱“正在进行的工作”,那么硬头非常好。它会将您重置为最近的提交,并清除工作树和索引中的所有更改。
最后,如果您需要找到您“删除”的提交,除非您已经垃圾收集了存储库,否则它通常会出现在gitreflog中。
git rebase -i HEAD~2
这里“2”是您要重新设置基准的提交次数。
'git rebase -i HEAD`
如果您想重新设置所有提交的基础。
然后,您可以选择其中一个选项。
p、 pick=使用提交
r, reword = use commit, but edit the commit message
e, edit = use commit, but stop for amending
s, squash = use commit, but meld into previous commit
f, fixup = like "squash", but discard this commit's log message
x, exec = run command (the rest of the line) using shell
d, drop = remove commit
这些线路可以重新订购;它们是从上到下执行的。如果您删除此处的一行,则承诺将丢失。但是,如果您删除了所有内容,则重新启动将被中止。注意,空提交被注释掉
您只需使用选项“d”或删除包含您提交的行即可删除该提交。
使用git还原https://git-scm.com/docs/git-revert。它将还原所有代码,然后您可以进行下一次提交。然后head将指向上一次提交的代码。还原的提交不会删除,但不会影响您上次提交。
推荐文章
- 如何从远程Git存储库中提取并覆盖本地存储库中的更改?
- Github:导入上游分支到fork
- Git单次修订的日志
- Git在不改变提交时间戳的情况下进行改基
- VS 2017 Git本地提交数据库。每次提交时锁定错误
- 如何在过去的一些任意提交之间注入一个提交?
- 从GitHub克隆项目后拉git子模块
- GitHub上的分叉和克隆有什么区别?
- 递归地按模式添加文件
- 我如何使用notepad++(或其他)与msysgit?
- 如何将现有的解决方案从Visual Studio 2013添加到GitHub
- Git存储库中的悬垂提交和blob是什么?它们来自哪里?
- 我如何简单地从我最新的git提交创建一个补丁?
- Git显示“警告:永久添加到已知主机列表”
- 我如何检索一个回购的远程git地址?