如何合并最后 N 个 Git 提交

如何合并最后 N 个 Git 提交
如何合并最后 N 个 Git 提交

掌握 Git 中的提交压缩:

在处理项目时,您的提交历史记录可能会因大量小提交而变得混乱。这些次要的提交可能会使审查更改和了解项目历史变得困难。

在 Git 中,您可以将最后 N 次提交压缩为一次提交,从而创建更清晰且更易于管理的历史记录。本指南将引导您完成实现此目标的步骤,使您的版本控制更加高效。

命令 描述
git rebase -i HEAD~N 启动最后 N 次提交的交互式变基。
pick 在交互式变基期间按原样维护提交。
squash 在交互式变基期间将提交与前一个提交合并。
sed -i '1!s/pick/squash/' .git/rebase-merge/git-rebase-todo 对于变基待办事项列表中除第一个提交之外的所有提交,自动将“pick”替换为“squash”。
git rebase --continue 解决冲突后继续变基过程。
git rebase --abort 中止变基过程并返回变基开始前的状态。
HEAD~N 指当前HEAD之前N位的提交。

了解 Git 提交压缩

第一个脚本使用 git rebase -i HEAD~N 启动最后 N 次提交的交互式变基。在交互式屏幕中,您可以将要合并的提交的“pick”替换为“squash”。此过程有助于将多个较小的提交合并为一个,使您的提交历史记录更清晰且更易于管理。编辑完成后,保存并关闭编辑器。如果存在冲突,您可以解决它们并继续 git rebase --continue

第二个脚本是一个 Bash 脚本,可以自动执行压缩过程。它首先检查是否提供了提交数量 (N)。然后,它运行 git rebase -i HEAD~N 和用途 sed 对于变基待办事项列表中除第一个提交之外的所有提交,将“pick”替换为“squash”。这使得压缩多个提交变得更容易,而无需手动编辑文件。最后,它继续 rebase 过程 git rebase --continue,自动处理任何必要的冲突解决方案。

使用 Git Rebase 将多个提交压缩为一个

Git 命令

git rebase -i HEAD~N
# Replace N with the number of commits you want to squash
# In the interactive rebase screen that appears, change 'pick' to 'squash' (or 's') for the commits you want to squash
# Save and close the editor
# Edit the commit message if needed, then save and close the editor again
# If there are conflicts, resolve them and then run
git rebase --continue
# Your last N commits are now squashed into one commit

使用 Shell 脚本自动执行提交压缩

bash脚本

#!/bin/bash
if [ -z "$1" ]
then
  echo "Usage: ./squash_commits.sh <N>"
  exit 1
fi
git rebase -i HEAD~$1
# Automatically replace 'pick' with 'squash' for all but the first commit
sed -i '1!s/pick/squash/' .git/rebase-merge/git-rebase-todo
git rebase --continue

高级 Git 压缩技术

Git 中压缩提交的另一个重要方面是处理过程中可能出现的合并冲突。组合多个提交时,不同提交的更改可能会相互冲突。为了解决这些冲突,Git 提供了如下命令 git status 查看哪些文件存在冲突以及 git add 将它们标记为已解决。解决冲突后,您可以使用以下命令继续变基 git rebase --continue

如果出现问题,了解如何中止变基也很有用。命令 git rebase --abort 停止变基过程并将存储库返回到变基开始之前的先前状态。这确保您可以安全地撤消变基过程中所做的任何更改。了解这些命令可以显着提高您有效管理复杂 Git 历史记录的能力。

有关 Git 提交压缩的常见问题

  1. 压缩提交是什么意思?
  2. 压缩提交意味着将多个提交合并为一个提交以简化提交历史记录。
  3. 为什么我应该压缩提交?
  4. 压缩提交可以使您的项目历史记录更清晰、更易于阅读,尤其是在使用许多小提交时。
  5. 如何开始交互式变基?
  6. 使用命令 git rebase -i HEAD~N,将 N 替换为您要压缩的提交数。
  7. 交互式 rebase 中的“pick”和“squash”是什么意思?
  8. “Pick”按原样保留提交,而“squash”将其与之前的提交合并。
  9. 如何解决变基期间的冲突?
  10. 使用 git status 识别冲突,手动解决它们,然后使用 git addgit rebase --continue
  11. 如果出现问题,我可以中止变基吗?
  12. 是的,您可以使用 git rebase --abort 停止变基并返回到之前的状态。
  13. 使用 Bash 脚本压缩提交有什么好处?
  14. Bash 脚本可自动执行该过程,从而节省时间并降低手动错误的风险。
  15. 有没有办法自动压缩变基中的提交?
  16. 是的,通过使用脚本来修改变基待办事项列表 sed,您可以自动将“pick”更改为“squash”。

总结 Git 提交压缩

Git 中的压缩提交是维护干净且可读的项目历史记录的强大技术。无论是使用交互式变基还是使用 Bash 脚本自动化,您都可以将多个提交合并为一个提交,从而使日志更易于管理。了解如何解决冲突和中止变基可以提高您的 Git 熟练程度,确保您能够处理出现的任何问题。掌握这些命令和方法将显着提高您的版本控制实践。