逆转历史记录中的更改 恢复 Git Push 中的原始提交历史记录

逆转历史记录中的更改 恢复 Git Push 中的原始提交历史记录
逆转历史记录中的更改 恢复 Git Push 中的原始提交历史记录

恢复 Git 提交历史记录:分步指南

我的 user.name 和 user.email 设置不正确,这是我在个人项目上经过一个月的努力后发现的。即使在我进行了这些更正之后,很久之后我才发现,错误的作者姓名仍然存在于我之前的提交中。我尝试了 git rebase 试图通过更改这些提交来更新我的贡献图。

但这样做会无意中更改了提交日期,给人的印象是所有提交都是同时进行的。在这种无意的修改之后,本教程试图帮助您恢复原始的提交历史记录,以便您的贡献得到适当的反映。

命令 描述
git reflog 在参考日志中显示所有存储库修改的历史记录,包括变基和重置。
git reset --hard 删除对工作目录和暂存区域所做的所有修改,并将当前分支重置为所选提交。
git push --force 强制将本地更改推送到远程存储库,消除以前的任何冲突。
git filter-branch --env-filter 对每次提交应用过滤器,重写 Git 历史记录并启用对环境变量(如作者和提交者数据)的更改。
WRONG_EMAIL="wrong@example.com" 创建一个变量来跟踪用于先前提交的错误电子邮件地址。
CORRECT_NAME="Correct Name" 建立一个变量来指示修订历史记录中应更改哪个名称。
CORRECT_EMAIL="correct@example.com" 设置一个变量来指示应使用哪个电子邮件地址来代替更新历史记录中的旧地址。
export GIT_COMMITTER_NAME 将提交者名称设置为重写提交的给定值。
export GIT_COMMITTER_EMAIL 将提交者电子邮件设置为重写提交的给定值。
export GIT_AUTHOR_NAME 将作者姓名修改为重写提交的所选值。
export GIT_AUTHOR_EMAIL 将作者电子邮件修改为重写提交的指定值。
--tag-name-filter cat 确保也使用给定的过滤器重写标签。

理解 Git 历史的恢复

The scripts offered are meant to rectify and restore Git's commit history, especially in cases where an inadvertent rebase has changed commit dates. In the first script, the commit hash is found before the rebase process by utilizing 提供的脚本旨在纠正和恢复 Git 的提交历史记录,特别是在无意的 rebase 更改了提交日期的情况下。在第一个脚本中,通过利用 strong>git reflog 在变基过程之前找到提交哈希。此命令显示所有存储库修改的历史记录,包括重置和变基。找到相关提交哈希后,使用以下命令将分支重置为该提交 git reset --hard 命令,从而擦除所有后续修改。这是重要的一步,因为它将存储库恢复到错误变基之前的先前状态。然后使用以下命令将本地修改推送到远程存储库 git push --force 命令,使用重置分支覆盖以前的历史记录。

第二个脚本的目的是更新提交作者详细信息而不更改提交日期。随着使用 git filter-branch --env-filter 命令,环境变量(例如作者和提交者详细信息)可以在所有提交中更改。为了检测不准确的细节并描述新的、正确的细节,变量,例如 WRONG_EMAIL, CORRECT_NAME, 和 CORRECT_EMAIL 被定义。接下来,脚本使用以下命令更新提交者详细信息 export GIT_COMMITTER_NAMEexport GIT_COMMITTER_EMAIL;同样,它使用更新作者详细信息 export GIT_AUTHOR_NAMEexport GIT_AUTHOR_EMAIL。选项 --tag-name-filter cat 保证也使用给定的过滤器重写标签。该脚本可用于使用正确的作者信息重写提交历史记录,而不会影响原始提交日期。

恢复 Git 的原始提交历史记录

使用 Git 命令

# Step 1: Identify the commit hash before the rebase
git reflog
# Look for the commit hash before the rebase operation
# Step 2: Reset the branch to the commit before the rebase
git reset --hard <commit_hash>
# Step 3: Verify the reset
git log
# Ensure the commit history is back to its original state
# Step 4: Force push the reset history to the remote repository
git push --force

重写提交作者详细信息,同时保持日期相同

使用 Git 过滤分支

# Step 1: Rewrite author information without altering commit dates
git filter-branch --env-filter '
WRONG_EMAIL="wrong@example.com"
CORRECT_NAME="Correct Name"
CORRECT_EMAIL="correct@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$WRONG_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$WRONG_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi'
--tag-name-filter cat -- --branches --tags

使用 Git 恢复历史记录而不丢失数据

The use of gitcherry-pick 的使用 是在恢复 Git 历史记录时需要考虑的另一个因素。您可以使用此命令将先前提交所做的修改应用到当前分支。当您必须手动重建无意更改的历史记录时,它会非常有帮助。例如,如果变基或重置出错,并且您想添加回个别更改,您可以使用 git cherry-pick 这样做。该技术通过保留原始提交日期和消息来保持项目历史记录完整。

strong>git reflog 是一个额外的有用命令。它显示对分支提示和其他存储库引用所做的所有修改的历史记录,甚至是那些经常在视图中隐藏的修改。 git log。这使您可以找到在不利的重置或变基期间可能已被覆盖或丢失的提交哈希。使用组合 git refloggit reset --hard, you can revert modifications by restoring your branch to a former state. Furthermore, it's crucial to occasionally take snapshots of the status of your repository using ,您可以通过将分支恢复到以前的状态来恢复修改。此外,偶尔使用 git 标签拍摄存储库状态的快照也很重要。标签很有用,因为它们可以让您注释特定的历史时刻,如果出现严重问题,这些历史时刻可以撤消。

有关恢复 Git 历史记录的常见问题

  1. 目的是什么 git cherry-pick
  2. 它通过将先前提交所做的修改应用于当前分支来帮助手动重建历史记录。
  3. What role does git reflog 有什么作用 玩在保存过去吗?
  4. 它通过显示对分支提示和引用所做的所有修改的历史记录来帮助恢复丢失的提交。
  5. 什么是 git reset --hard 意思是?
  6. 它会删除对工作目录和暂存区域所做的所有修改,并将当前分支重置为某个提交。
  7. Git 中标签有什么用?
  8. 标签拍摄存储库状态的快照,如果出现严重问题,可以恢复这些快照。
  9. 17 号: 为什么要用它?
  10. 将过滤器应用于过去,更改所有提交中的作者和提交者详细信息,以便重写历史记录。
  11. 有什么区别 git push --force 来自普通的推动?
  12. 不管冲突如何,它都会强制本地更改替换远程存储库。
  13. 什么时候可以使用 git reset --hard
  14. 当您需要将分支重置为某个提交并删除任何未提交的修改时,这应该是您采用的方法。
  15. 使用时需要采取哪些安全措施 17 号
  16. 由于此命令会重写历史记录,如果使用不当可能会导致数据丢失,因此请确保备份存储库。
  17. How can a faulty rebase be undone with the aid of 如何借助 git reflog 撤消错误的变基
  18. 通过显示每个引用更改,您可以找到变基之前的提交哈希并适当调整分支。

关于 Git 历史记录恢复的结束语

在不更改提交日期的情况下更新 Git 历史记录中的作者信息可能很困难,但使用正确的命令,这是可以实现的。当您使用 git reflog 查看过去的状态并使用 git filter-branch 更改作者详细信息时,您的提交历史记录是安全的。为了避免丢失数据,请务必在执行此类任务之前备份您的存储库。这些行动将支持维护可靠且准确的项目文档。