“git filter-branch” successfully used to change committer/author, but changes don't reflect on github

StackOverflow https://stackoverflow.com/questions/10908872

  •  12-06-2021
  •  | 
  •  

Domanda

I recently replaced the author, committer and emails thereof in all of my local commits, using the following command:

git filter-branch -f --env-filter '
if [ "$GIT_COMMITTER_NAME" = "oldname" ];
then
    GIT_COMMITTER_NAME="newname";
    GIT_COMMITTER_EMAIL="newaddr";
    GIT_AUTHOR_NAME="newname";
    GIT_AUTHOR_EMAIL="newaddr";
fi

if [ "$GIT_AUTHOR_NAME" = "oldname" ];
then
    GIT_COMMITTER_NAME="newname";
    GIT_COMMITTER_EMAIL="newaddr";
    GIT_AUTHOR_NAME="newname";
    GIT_AUTHOR_EMAIL="newaddr";
fi
' -- --all

The updates are immediately evident locally (e.g. in my SourceTree environment). However, after force-pushing the modified repository to GitHub…

git push -f origin master

… two individual items stubbornly refuse to have their committer and author updated: the Gemfile.lock file and a Views directory.

Please also note that:

  1. This is the second time that I am performing this kind of operation on this repository. I believe that I faced no such issues the first time around.

  2. Searching for my old name in the repository…

    $ find . "<oldname">
    

does yield a bunch of results, which means that the oldname still lurks in many of the repository files — including files that appear update both on GitHub and locally.

My question, then: How can I change the committer/author of the two "stubborn" files on GitHub?

È stato utile?

Soluzione

After using git filter-branch, git still retains a backup copy of the history of the repo in refs/original. This is so that if you mess something up with filter-branch, you can revert if need be. Once you're sure everything went smoothly, you can remove the backed up ref with:

git update-ref -d refs/original/refs/heads/master

For some reason, it still takes an additional commit for github to reflect the change. I'll add a space or something to the readme, commit and push... after that, github reflects the correct authors on the project page.

Altri suggerimenti

What exact view on GitHub are you using to determine the author of the line? Likely it is either cached, or you are viewing something specific to the old commit SHA1.

You can test that it worked by doing a fresh clone of the repo, and checking git blame filename for those two files. If that shows the correct author, then it worked.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top