如何在不覆盖当前作者的前一作者姓名的情况下进行git更改

时间:2017-01-24 11:05:03

标签: git bitbucket qt-creator

我想美化整个项目并正确格式化代码,但它会重写当前代码并使我成为50%代码的作者。我们的团队和我都不想要那样。所以问题是:如何对存储库进行更改,而所有作者都保持不变?我理解这个过程可能包含两个步骤:1)在一个单独的分支中进行提交,并进行大量更改,然后2)将我作为此提交的每一行的作者还原给以前的作者。

甚至可能吗?我无法绕过它。也许,还有另一种方式吗?我怎样才能做得更好?

我们使用Bitbucket存储库,Qt Creator作为IDE和艺术风格作为美化。

非常感谢任何帮助和建议。

1 个答案:

答案 0 :(得分:1)

GIT_AUTHOR_NAME
GIT_AUTHOR_EMAIL
GIT_AUTHOR_DATE
GIT_COMMITTER_NAME
GIT_COMMITTER_EMAIL
GIT_COMMITTER_DATE

这些变量可用于在git commit上伪造姓名,电子邮件,作者和提交者的日期。

例如:GIT_AUTHOR_NAME="foo" GIT_AUTHOR_EMAIL="foo@foo.com" git commit -m 'blah'

git cherry-pickgit rebase保留同一作者,但将提交者更改为git-config中的当前user.name和user.email。

如果您将使用cherry-pick并重写一些代码,这是可能的方法。

假设old-branch是A-B-C。

git init newbranch
cd newbranch
git init
git remote add origin /foo/bar/.git
git fetch origin old-branch
git checkout --orphan new-branch A
#make some extra changes
git add .
GIT_AUTHOR_NAME=$(git log -1 --pretty=%an A) GIT_AUTHOR_EMAIL=$(git log -1 --pretty=%ae A) GIT_COMMITTER_NAME=$(git log -1 --pretty=%cn A) GIT_COMMITTER_EMAIL=$(git log -1 --pretty=%ce A) git commit -m $(git log -1 --pretty=%B A)
git cherry-pick -n B
#make some extra changes
git add .
GIT_AUTHOR_NAME=$(git log -1 --pretty=%an B) GIT_AUTHOR_EMAIL=$(git log -1 --pretty=%ae B) GIT_COMMITTER_NAME=$(git log -1 --pretty=%cn B) GIT_COMMITTER_EMAIL=$(git log -1 --pretty=%ce B) git commit -m $(git log -1 --pretty=%B B)
#make some extra changes
git add .
git cherry-pick -n C
GIT_AUTHOR_NAME=$(git log -1 --pretty=%an C) GIT_AUTHOR_EMAIL=$(git log -1 --pretty=%ae C) GIT_COMMITTER_NAME=$(git log -1 --pretty=%cn C) GIT_COMMITTER_EMAIL=$(git log -1 --pretty=%ce C) git commit -m $(git log -1 --pretty=%B C)

现在我们得到了美化new-branch