git: change one line in file for the complete history

When I started my git repo I commited a few files as initial commit to it. Now, many commits later, I noticed that I included in those files a line with information which I do not want to publish (unlike the rest of the code). So I want to remove/change this one line and keep the rest of the code.

Searching around I found this solution: Insert an empty commit as initial commit (described here: Insert a commit before the root commit in Git?), do a rebase on it and then edit the old first commit via amend. Unfortunately, many cruel merge conflicts arise during rebase (as described here: git: solving conflicts caused by rebase).

  • If i push an amended commit will it create a new commit
  • How does git commit --amend work, exactly?
  • Change commit message for specific commit
  • Why doesn't git amend warn you when there's nothing to amend?
  • Edit the root commit in Git?
  • How to undo “git commit --amend” done instead of “git commit”
  • Is there a different way to solve my problem or do have to rebase and edit all conflicts by hand?

    Thanks in advance 🙂

    TiBo

  • Is there a Github clone in PHP that I can run on my own server?
  • Git: get all blobs with pattern
  • Git - How can I list all files changed on the master branch between two times?
  • git submodule checks out the same commit
  • How can I setup hudson (or jenkins) build from release/hotfix branches using the git-flow branching model?
  • Setting WinMerge as Diff/merge tool in Visual Studio 2015
  • 3 Solutions collect form web for “git: change one line in file for the complete history”

    Here’s a command that will remove an offending line from a file’s history in all your branches:

    git filter-branch --tree-filter 'sed -i "/sensitive information/ d" filename' -- --all
    

    This checks out every revision, runs the sed command on it, then commits that revision back.

    The sed command in this case matches any lines containing the pattern sensitive information in the file named filename and deletes those lines.

    Note: it’s good if you have a backup, and try the sed script on its own first to make sure it’s doing what you want, because it can take quite a while to run on a long history.

    I made this command that doesn’t error out when a file doesn’t exist:

     filename=./path/to/your/filename
     filter=your_regex_here
    
     git filter-branch --tree-filter 'test -f $filename && sed -i.bak "/$filter/d" $filename  || echo “skipping file“' -- --all
    

    You can have a look at git filter-branch

    The examples in the link should get you going: http://git-scm.com/docs/git-filter-branch

    Git Baby is a git and github fan, let's start git clone.