如何从分支历史记录中删除提交?我应该使用git reset-hard HEAD吗?
当前回答
错误:
我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
祝你今天愉快。
其他回答
这是另一种方法:
签出要还原的分支,然后将本地工作副本重置为远程服务器上最新的提交(之后的所有内容都将再见)。为此,在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
这将删除本地存储库中当前提交之后的所有提交,但仅限于该分支。
假设我们要从回购中删除提交2和4。(数字越高,提交越新;0是最早的提交,4是最新的提交)
commit 0 : b3d92c5
commit 1 : 2c6a45b
commit 2 : <any_hash>
commit 3 : 77b9b82
commit 4 : <any_hash>
注意:您需要对回购拥有管理权限,因为您使用的是--hard和-f。
gitcheckout b3d92c5签出最后一个可用的提交。gitcheckout-b repair创建一个新的分支来处理。git cherry pick 77b9b82运行提交3。git cherry pick 2c6a45b运行提交1。git checkout master checkout master。git reset--hard b3d92c5将主机重置为上次可用提交。gitmerge修复将我们的新分支合并到master上。git push-f origin master将master推送到远程存储库。
如果您没有发布更改,为了删除最新提交,您可以
$ git reset --hard HEAD^
(注意,这也会删除所有未提交的更改;请小心使用)。
如果您已经发布要删除的提交,请使用git-restore
$ git revert HEAD
当我提交并推送时,我通常会做什么(如果有人推送他的提交,这可以解决问题):
git reset --hard HEAD~1
git push -f origin
希望这有帮助
如果要删除当前正在进行但不想删除数据的提交-
git reset --soft HEAD~1
如果要删除当前正在进行的提交,并希望删除相关数据-
git reset --hard HEAD~1
PS:这些命令只会删除本地提交。
推荐文章
- 如何将git配置存储为存储库的一部分?
- 如何修改GitHub拉请求?
- 如何在Github和本地删除最后n次提交?
- 我如何调试git/git-shell相关的问题?
- 错误:无法使用rebase进行拉取:您有未分阶段的更改
- Git隐藏未缓存:如何把所有未分期的变化?
- 真实的恶魔
- 如何从另一个分支获得更改
- Git:权限被拒绝(publickey)致命-无法从远程存储库读取。克隆Git存储库时
- git reflog和log有什么区别?
- git推挂在Total line之后
- 重命名git子模块
- 结合Git存储库的前两次提交?
- Xcode 6 gitignore文件应该包括什么?
- 我如何从现有回购的分支创建一个新的GitHub回购?