改变历史提交记录中作者的信息

#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"

if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

取消跟踪已经暂存的文件,但不从仓库中删除文件

$ git config core.sparseCheckout true   # 开启稀疏检出。
$ gvim .git/info/sparse-checkout        # 编辑这个文件,将需要跟踪的文件添加进去。语法和 .gitignore 一致,不同的是 .gitignore 是忽略,它是跟踪。
$ git checkout                          # 可以看到不在 sparse-checkout 里声明过的文件全都不见了,但仓库里还有。
$ git ls-files -v                       # 可以看到所有在仓库的,以后会被跟踪和不会被跟踪的所有文件。

参考资料

  1. GitHub. Changing author info.
  2. 8.2.3.1. 稀疏检出.