如何从分支历史记录中删除提交?我应该使用git reset-hard HEAD吗?
当前回答
假设我们要从回购中删除提交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推送到远程存储库。
其他回答
如果您还没有将提交推到任何位置,可以使用gitrebase-i删除该提交。首先,找出提交的时间(大约)有多远。然后执行以下操作:
git rebase -i HEAD~N
~N表示对最后N个提交进行重新基化(N必须是一个数字,例如HEAD~10)。然后,您可以编辑Git提供给您的文件,以删除违规提交。保存该文件后,Git将重写以下所有提交,就像您删除的提交不存在一样。
GitBook中有一个很好的部分,用图片和示例来改变基础。
但是要小心,因为如果你改变了你在其他地方推动的东西,除非你计划进行强制推动,否则需要另一种方法。
强制更改历史记录
假设您不仅希望删除最后一次提交,而且希望删除最后n次提交中的特定提交,请执行以下操作:
gitrebase-i HEAD~<要返回的提交数>,所以如果您想查看最后五次提交,请使用gitrebase-iHEAD~5。
然后在文本编辑器中,将单词pick更改为放置在要删除的每个提交旁边。保存并退出编辑器。瞧!
附加更改历史记录
尝试git-restore<commit hash>。Revert将创建一个新的提交,以撤消指定的提交。
git reset --hard commitId
git push <origin> <branch> --force
PS:CommitId指的是要还原回的那个
如果你是IntelliJ用户,界面简直太棒了。只需单击一次,即可立即看到效果。这个地方的快捷方式:MacOS上的Cmd+9。
如果您已经推送,请首先在HEAD($GIT_commit_HASH_HERE)找到您想要的提交,然后运行以下命令:
git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force
然后,在复制了回购的每个位置,运行:
git reset --hard origin/master
推荐文章
- Git分支之间的视觉差异
- 在GitHub中编辑git提交消息
- 是否有可能' git状态'只修改文件?
- Git:如何区分两个不同的文件在不同的分支?
- 如何从远程Git存储库中提取并覆盖本地存储库中的更改?
- Github:导入上游分支到fork
- Git单次修订的日志
- Git在不改变提交时间戳的情况下进行改基
- VS 2017 Git本地提交数据库。每次提交时锁定错误
- 如何在过去的一些任意提交之间注入一个提交?
- 从GitHub克隆项目后拉git子模块
- GitHub上的分叉和克隆有什么区别?
- 递归地按模式添加文件
- 我如何使用notepad++(或其他)与msysgit?
- 如何将现有的解决方案从Visual Studio 2013添加到GitHub