GitHub上怎么删除提交

问答GitHub上怎么删除提交
王利头 管理员 asked 6 月 ago
3 个回答
Mark Owen 管理员 answered 6 月 ago

在软件开发的迭代过程中,难免会出现需要删除提交的情况。无论是修复错误、撤销更改,还是解决合并冲突,了解如何从 GitHub 上删除提交至关重要。以下是我总结的几种方法:

方法 1:使用 git rebase -i

git rebase -i 命令可以让你交互式地修改提交历史。具体步骤如下:

  1. 在需要删除提交的工作目录中运行 git rebase -i HEAD~n,其中 n 是要删除的提交数量。
  2. 系统将打开一个文本编辑器,显示所有提交的列表。
  3. 找到要删除的提交,将该行的命令从 pick 更改为 drop
  4. 保存更改并退出文本编辑器。
  5. Git 将重新执行提交,跳过已删除的提交。

“`bash
git rebase -i HEAD~3

pick 1234567 Fix typos
drop 7654321 Introduce a bug
pick 9876543 Add new feature

“`

方法 2:使用 git revert

git revert 命令创建一个新的提交,该提交撤销了要删除的提交所做的更改。具体步骤如下:

  1. 运行 git revert <提交哈希>,其中 <提交哈希> 是要删除的提交的哈希。
  2. Git 将创建一个新的提交,撤销之前的更改。
  3. 注意,git revert 不会从提交历史中删除原始提交,而是会创建一条新提交进行抵消。

“`bash
git revert 1234567

“`

方法 3:使用 git filter-branch

git filter-branch 命令是一个功能强大的工具,可以让你重写提交历史。不过,它更复杂,可能会对代码库造成意外的后果。因此,建议谨慎使用。

“`bash
git filter-branch –force –index-filter ‘git rm -rf –cached –ignore-unmatch path/to/remove’ HEAD

“`

注意事项:

  • 删除提交可能会对其他基于该提交的提交产生连锁反应。
  • 删除提交后,无法恢复原始提交。
  • 在删除提交之前,请务必备份你的代码库。
  • 对于公开的代码库,删除提交可能会破坏其他贡献者的工作流程。

结论:

了解如何从 GitHub 上删除提交对于解决版本控制问题非常重要。通过使用 git rebase -igit revertgit filter-branch 命令,你可以根据自己的需要从提交历史中删除不必要的提交。但是,在删除提交之前,请权衡潜在的风险和好处,并始终优先考虑代码库的完整性和稳定性。

seoer788 管理员 answered 6 月 ago

在GitHub上删除提交是一个至关重要的技能,它可以帮助你保持代码库的整洁有序。无论是错误提交还是需要重构代码,删除提交都能让你回滚代码更改,恢复到之前的工作状态。在这篇指南中,我将深入介绍在GitHub上删除提交的三种有效方法。

使用交互式变基(Interactive Rebase)

交互式变基允许你重新应用提交,同时修改提交信息或删除提交。这是删除提交最常见的方法,因为它既灵活又强大。

  1. 定位要删除的提交:使用命令git log找到你要删除的提交哈希值。
  2. 启动交互式变基:运行命令git rebase -i HEAD~[n], 其中[n]是你想要删除的提交前面提交的数量。
  3. 修改提交信息:编辑打开的编辑器,找到要删除的提交行,并将其更改为dropsquash
  4. 保存并退出编辑器:保存更改并关闭编辑器。
  5. 变基提交:Git将应用修改后的提交,删除你指定的提交。

使用强制推送(Force Push)

强制推送是一种更直接的方法,它可以覆盖远程分支上的提交历史。但是,只有在你确信要删除提交并且不会影响其他协作者时,才应使用此方法。

  1. 定位要删除的提交:使用命令git log找到你要删除的提交哈希值。
  2. 强制推送:运行命令git push -f origin <branch-name>, 其中<branch-name>是你想要删除提交的分支名称。
  3. 注意:强制推送会覆盖远程分支上的历史记录,因此请谨慎使用。

使用提交日志过滤器(Commit Log Filter)

提交日志过滤器允许你从日志历史中过滤掉提交。这不会删除提交,但它会在Git命令的输出中隐藏它们。

  1. 创建提交过滤器:创建文件.gitattributes并在其中添加以下行:filter.my-filter.clean=sourcedir/my-filter.sh
  2. 编写过滤器脚本:创建文件my-filter.sh,包含以下内容:“`

git cat-file commit “$@” | sed ‘/subject: [DEL].*$/d’

3. **启用过滤器:**运行命令
git config filter.my-filter.clean true
4. **使用过滤器:**后续的Git命令将根据你的过滤器过滤提交。例如,运行
git log –pretty=oneline –filter=my-filter会显示不包含[DEL]`主题的提交。

注意事项

在删除提交时,需要注意以下几点:

  • 如果你已经推送了提交,则只能使用强制推送来删除它。
  • 删除提交可能会影响协作者,因此在进行任何删除之前,最好通知他们。
  • 谨慎使用强制推送,因为它可能会造成意外后果。
  • 提交日志过滤器不会删除提交,它只会在Git命令的输出中隐藏它们。

通过遵循这些步骤,你可以有效地从GitHub上删除提交,保持代码库的整洁有序。无论你需要回滚错误还是重构代码,删除提交都是一个宝贵的技能,可以帮助你高效地管理你的版本控制工作流程。

ismydata 管理员 answered 6 月 ago

在软件开发过程中,有时我们需要删除错误或不必要的提交。 GitHub 提供了多种方法来完成此操作。以下是如何根据不同的情况删除提交的综合指南:

直接删除本地提交

  • git reset HEAD~n:删除最近的 n 个提交。
  • git reset –hard HEAD:删除所有暂存和已提交的更改。

注意: 这些命令直接操作本地存储库,因此在执行前请确保已备份您的代码。

删除远程提交

  • git revert :创建一个新的提交,反转指定提交所做的更改。
  • git push -f origin ::强制将远程分支重置为一个较早的提交。

注意: 这些命令会修改远程仓库,因此在执行前请征得其他协作者的同意。

从历史记录中删除提交

如果需要从历史记录中永久删除提交,可以使用交互式重写工具 git rebase

  • git rebase -i :交互式选择要删除的提交。

注意: 此方法会重写历史记录,因此在执行前请确保您有一个干净的本地分支。

Squash 提交

Squash 是一种将多个提交合并为单个提交的方法,从而可以清理历史记录:

  • git rebase –interactive HEAD~n:交互式选择要合并的提交。
  • 合并提交时,选择“squash”或“fixup”选项。

注意: Squash 不会删除提交,而是将它们的更改合并到一个新的提交中。

选择最佳方法

选择删除提交的方法取决于具体情况:

  • 直接删除本地提交: 用于删除小的错误、测试代码或临时更改。
  • 删除远程提交: 用于更重要的错误或与协作者协调的更改。
  • 从历史记录中删除提交: 用于永久删除敏感信息或严重错误。
  • Squash 提交: 用于清理历史记录或合并类似的提交。

其他注意事项

  • 使用 Force 推送: 仅在绝对必要时使用强制推送 (force push),因为它会覆盖远程存储库中的现有更改。
  • 通知团队: 在删除远程提交之前,请通知其他协作者,以免造成混乱。
  • 备份代码: 在进行任何操作之前,请确保已有代码的备份。
  • 避免频繁删除: 频繁删除提交可能导致历史记录混乱,因此应尽可能谨慎进行。

总之,GitHub 提供了各种方法来删除提交,从简单的本地删除到从历史记录中永久删除。根据不同的情况选择最佳方法,并始终考虑潜在的后果。

公众号