如何恢复'git filter-branch -f --env-filter'

时间:2012-04-18 13:46:41

标签: git commit revert git-filter-branch

我对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

我认为这只会改变我的提交,但它会更改回购邮件中的所有提交以获取我的姓名和电子邮件。当然,为了继续我的“愚蠢”,我推动了改变。

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

有没有办法还原呢?也许使用先前拉动的副本来推送原始信息?

3 个答案:

答案 0 :(得分:7)

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

git reset --hard refs/original/master

答案 1 :(得分: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"

答案 2 :(得分:1)

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

感谢您的帮助。