如何更改多个提交的作者并在此之后仅推送一次?

时间:2018-08-21 15:12:40

标签: git git-commit

我需要在几次提交中更改我的姓名和电子邮件。所以我从最老的开始。问题是:在更改提交的作者之后,我可以继续更改所有剩余提交的作者吗?还是应该在每次更改作者之后执行git push --force-with-lease

我如何首先更改作者并仅在编辑所有必需提交中的作者时推送?

git checkout 12345c3

git commit --amend --author "New name <name@new.com>"

Checkout the original branch.

git checkout MyBranch

git replace 12345c3 cd3c123

git filter-branch -- --all

git replace -d 12345c3

2 个答案:

答案 0 :(得分:2)

编辑多个提交的最佳方法是使用git rebase

使用rebase,您甚至不需要检出要编辑的每个提交。您所需要做的就是

git rebase -i <the oldest commit you want to edit>

-i将打开一个文本编辑器,其中列出了直到您通过的提交为止的所有提交。所以你会看到这样的东西:

pick 2e0ed56d Message 1
pick f38dd6ed Message 2
pick 5518e03e Message 3

# Rebase d29d7e11..2283c3c9 onto d29d7e11 (5 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted. 
#
# Note that empty commits are commented out

现在,您要做的就是用picke替换要修改的每个提交前面的edit,保存更改并关闭文件。现在将要求您分别修改每个提交。

现在要警告git rebase的工作方式是取消提交并使用所做的更改创建它们的副本。因此,如果要与其他人共享存储库,请非常小心。

您可以使用

git push -f

如果您要将更改推送到服务器并破坏这些提交的先前版本。只要确保您没有与之合作的人拉过您当前的分支即可。

答案 1 :(得分:0)

如果您要编辑的提交已经集成到一个共享分支(在多个开发人员之间共享),那么您将被要求强制推送(-f)更新的科。除非整个团队都参与其中,否则通常不需要执行此操作。您实际上并不是在编辑提交,因为提交是不可变的。您正在使用不同的信息创建新的提交。

您可以使用thisfilter-branch)方法。请记住,这会将每个提交重新写回到您更改的最旧提交。您将需要更新所有内容,然后推送一次(特别是如果它是共享分支)。