4

我是一个关于 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 上的所有提交似乎也有重复的条目。一个有我的名字和电子邮件,一个是原始的。

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

4

3 回答 3

7

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

git reset --hard refs/original/master
于 2012-04-18T14:06:28.950 回答
1

如果您还没有清理,您可以使用重置您的分支: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"

于 2012-04-18T14:12:27.420 回答
1

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

谢谢你们的帮助。

于 2012-04-19T11:46:34.400 回答