【问题标题】:How to revert a 'git filter-branch -f --env-filter'如何恢复“git filter-branch -f --env-filter”
【发布时间】:2012-04-29 22:40:12
【问题描述】:

我是一个关于 git 的新手,通常 git commit、pull 和 push 是我唯一执行的命令。 最近注意到我的提交被设置为默认名称和电子邮件,并想更改它。 我愚蠢地运行了这个,我在某处的帖子中找到了这个:

git filter-branch -f --env-filter "GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='newemail'; 
GIT_COMMITER_NAME='Newname'; GIT_COMMITTER_EMAIL='newemail';" HEAD

我认为这只会更改我的提交,但它却将 repo 中的所有提交更改为包含我的姓名和电子邮件。当然,为了继续我的“愚蠢”,我推动了这些变化。

此外,我似乎已经丢失了历史记录,并且 github 上的所有提交似乎也有重复的条目。一份有我的姓名和电子邮件以及原始的一份。

有办法恢复吗?也许使用以前拉的副本来推送原始信息?

【问题讨论】:

标签: git commit revert git-filter-branch


【解决方案1】:

如果你在执行 filter-branch 命令后没有做任何清理松散对象的操作,你可以重置你的 master 分支(假设你发出命令时 HEAD 是 master):

git reset --hard refs/original/master

【讨论】:

    【解决方案2】:

    如果您还没有清理,您可以使用:git reset --hard refs/original/master 重置您的分支,这将在您尝试之前重新加载所有原始文件,然后执行:

    git filter-branch -f --env-filter "GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='newemail'; GIT_COMMITER_NAME='Newname'; GIT_COMMITTER_EMAIL='newemail';" "--tag-name-filter cat -- --all"

    【讨论】:

      【解决方案3】:

      一位同事能够与一些 git 专家交谈,似乎以前副本中的“git push -f”解决了这个问题。另外,我需要在我的副本上执行 git pull --rebase。

      感谢你们的帮助。

      【讨论】:

        猜你喜欢
        • 2013-03-29
        • 2020-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-07
        • 1970-01-01
        • 2012-08-16
        • 2016-10-10
        相关资源
        最近更新 更多