我想美化整个项目并正确格式化代码,但它会重写当前代码并使我成为50%代码的作者。我们的团队和我都不想要那样。所以问题是:如何对存储库进行更改,而所有作者都保持不变?我理解这个过程可能包含两个步骤:1)在一个单独的分支中进行提交,并进行大量更改,然后2)将我作为此提交的每一行的作者还原给以前的作者。
甚至可能吗?我无法绕过它。也许,还有另一种方式吗?我怎样才能做得更好?
我们使用Bitbucket存储库,Qt Creator作为IDE和艺术风格作为美化。
非常感谢任何帮助和建议。
答案 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-pick
或git 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
。