git修改全部提交记录

最近使用Intellij IDEA进行开发的时候需要添加一个版本控制,不知道为何提交到Gitlab私库的时候用户名称全部显示为了Github上面的用户名称和邮箱。通过git log命令一查看全部提交都是这样的。因此需要找到一种能够修改上次或者全部提交记录的方式。对于Git的高级用法还没有系统研究过,所以,就上网查询了一下,发现git filter-branch真心不错,可以对所有的记录进行更正。

修改全部记录

具体使用方式如下,在目标目录下执行这条命令即可:

1
2
3
4
5
$ git filter-branch -f --env-filter \
"GIT_AUTHOR_NAME='[YOUR_NAME]'; \
GIT_AUTHOR_EMAIL='[YOUR_EMAIL]'; \
GIT_COMMITTER_NAME='[YOUR_NAME]'; \
GIT_COMMITTER_EMAIL='[YOUR_EMAIL]';" HEAD

可以看到会出现以下输出:

1
2
3
4
5
6
7
8
Rewrite 3368f52b1c24a8b9fcac3864089c08bfe0929d4d (1/7) (0 seconds passed, remaining 0 predicted) 
Rewrite 0a1444fab2235a67fb94a3f60ea3b8350c6c4b04 (2/7) (0 seconds passed, remaining 0 predicted)
Rewrite 1fe88255450e24fac784d23530f0b463496d0ef7 (3/7) (0 seconds passed, remaining 0 predicted)
Rewrite 577de20132b50faa4c874134973d5d2b8bb8ad2a (4/7) (0 seconds passed, remaining 0 predicted)
Rewrite 931f04cb491427e5a504751ab1dc4bec4e059050 (5/7) (0 seconds passed, remaining 0 predicted)
Rewrite bceaa47e80d55e2b8647ff2d847c7cd852c162ce (6/7) (0 seconds passed, remaining 0 predicted)
Rewrite a0790a0780e70d62143287bf10f09783b00d4a00 (7/7) (0 seconds passed, remaining 0 predicted)
Ref 'refs/heads/master' was rewritten

但是如果之前的这些变更我们已经提交到私库里面去怎么办呢?很简单,我们接下来使用git push -f命令强制让私库修改这些变更。

1
2
3
4
5
6
7
8
9
$ git push -f
Counting objects: 167, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (152/152), done.
Writing objects: 100% (167/167), 258.59 KiB | 3.15 MiB/s, done.
Total 167 (delta 62), reused 0 (delta 0)
remote: Resolving deltas: 100% (62/62), done.
To https://gitlab.com/anti-crawler-system/DemoProject.git
+ a0790a0...52621a8 master -> master (forced update)

接着去私库中查看就会发现已经完全修改好啦!

修改上一次记录

那修改上一次的提交记录呢?使用什么命令?答案是git commit --amend命令,具体使用方式如下:

1
git commit --amend --author="NewAuthor <[email protected]>"

总结

关于Git的用法有很多,其实遇到我这种需要修改全部提交记录的情况并不常见,但是需要提前先了解一下,不然问题出现的时候都无所适从。修改提交者记录的原因有很多,但不管怎么样,使用这两个方法都是可以的。如果是需要合并提交记录的话可以使用git rebase命令,具体用法后面会给大家介绍的。

分享到