用 4 个友好命令重写你的 git 历史记录

2025-05-28

用 4 个友好命令重写你的 git 历史记录

我构建了很多公开的实验性演示代码库来支持我的教程,并且经常鼓励大家 fork 这些代码库并部署到Netlify上进行尝试。问题是,这些实验性代码库的Git 历史记录通常非常混乱——我不希望大家也继承这些记录。所以,在发布和推广演示项目之前,我喜欢清理 Git 历史记录✨。

首先,TL;DR:谨慎使用这四个命令(稍后会详细介绍!),并享受整洁的船。

# 1. Reset the repo to the initial commit, preserving the current state of the files on your local machine
git reset --soft {INITIAL_COMMIT_HASH}

# 2. Stage all files
git add .

# 3. Make a commit
git commit -m "Initial commit"

# 4. Force push to the origin
git push --force
Enter fullscreen mode Exit fullscreen mode

让我们详细了解每个命令的作用。

软重置到初始提交

每次将更改推送到 git 时,都会根据与该提交相关的各种数据(例如提交消息、文件更改、提交作者和日期)生成一个称为提交哈希的唯一标识符。提交哈希指向提交时仓库的状态,并允许我们在仓库中前后移动。

如果您的存储库托管在 GitHub 上,您可以通过单击文件列表右上角的提交链接,从存储库主页查看提交哈希列表。

GitHub 仓库的屏幕截图,显示活动蓝色的提交列表链接,并以白色圆形边框突出显示。

这将带您进入提交列表,并在提交消息右侧显示简短的提交哈希值。向下滚动以查找第一个提交,单击以查看提交和完整的提交哈希值,或者使用复制按钮将完整的提交哈希值复制到剪贴板,其内容可能类似于:64d52970e9b73551e7d837ec367610p

GitHub 提交列表的屏幕截图,显示了顶部提交哈希上的工具提示,上面写着查看提交详细信息。

多种方法可以使用终端命令获取第一个提交哈希,但该方法可能因历史记录中的根提交数量而异 - 这超出了本博文的范围。

获取初始提交哈希值后,在终端中运行以下命令。该reset命令指示 git 将存储库重置为特定状态(在本例中为初始提交),并且该--soft标志使所有文件保持其最新的状态

# reset the repo to the initial commit
git reset --soft {INITIAL_COMMIT_HASH}

# check the status of your local repository
git status
Enter fullscreen mode Exit fullscreen mode

现在您应该会看到一条消息,指出您的分支落后于主分支,无论您在第一次提交后进行了多少次提交,并且有一些更改需要提交。

终端输出显示带有哈希的 git reset --soft,然后 git status 显示分支落后于 origin main 9 次提交,并且有 7 个文件更改。

暂存所有文件

接下来,使用git add .暂存所有文件。考虑到你的.gitignore文件将保持最新,并且包含你不想提交的任何敏感文件,你应该可以开始了。但此时,值得再检查一下,确保运行过程中git status没有列出你不想添加到存储库的任何文件。

提交

接下来,是时候用简洁的提交信息覆盖之前的提交历史记录了。您可以使用Initial commit或任何你喜欢的提交信息。

git commit -m 'I am rewriting history'
Enter fullscreen mode Exit fullscreen mode

强制推回原点

现在是时候使用 来推送新的提交,重写历史记录了git push --force。强制推送会告诉 git优先处理本地分支的更改,而不是推送到远程分支的更改。这正是我们在本例中想要做的!在终端中运行以下命令,享受它带来的强大功能。

完全免责声明:只有当您绝对清楚自己在做什么时,或者当您的项目很小并且您是唯一从事该项目的开发人员时,才应该在 git 中强制推送 - 就像我的大多数项目一样!

git push --force
Enter fullscreen mode Exit fullscreen mode

就这样,您已将强制更新推送到存储库。

终端输出显示 git commit -m 我正在重写历史记录和 git push --force

结果

返回 GitHub 并刷新提交列表,您将在提交列表中看到闪亮的新提交!

我强制推送的 repo 的屏幕截图,仅显示两次提交。

那些目光敏锐的完美主义者可能会注意到,我现在的提交历史记录中有两次提交,而不是一次初始提交。然而,对于我本人以及我的目的而言,这是一种快速友好地清理我的实验性 git 历史记录的方法——并且提醒我们,代码中没有任何东西是真正完美的。

如果您希望将 Git 仓库完全重置到其初始提交,则需要执行一些额外的步骤(我认为这些步骤不太友好)。一种实现方法是从主分支创建一个包含所有当前文件的孤立分支,然后对该分支进行单次提交,最后用新分支替换原来的主分支。工程经理Candost Dagdeviren写了一篇很棒的博客文章,详细介绍了这些步骤。

因此,继续前进,对你的 git 历史记录进行一点春季清理吧 —— 但请记住要谨慎操作,并且只有在你真的需要时才这样做!

文章来源:https://dev.to/whitep4nth3r/rewrite-your-git-history-in-4-friend-commands-an9
PREV
CSS 中的 : 和 :: 有什么区别?
NEXT
我在 OBS 中的 Twitch 实时编码设置