如何进行 git 更改而不被当前作者覆盖以前作者的名字
How to make git changes while not overwriting previous author's name by current author
我想美化整个项目并正确格式化代码,但它会重写当前代码并使我成为大约 50% 代码的作者。我们的团队和我不希望这样。所以问题是:如何在所有作者保持不变的情况下更改存储库?我将这个过程理解为可能包含 2 个步骤的过程:1) 在一个单独的分支中进行大量更改的提交,然后 2) 将我作为此提交的每一行的作者还原为以前的作者。
这可能吗?我无法理解它。也许,还有另一种方法?我怎样才能做得更好?
我们使用 Bitbucket 存储库,使用 Qt Creator 作为 IDE,使用艺术风格作为美化工具。
任何帮助和建议将不胜感激。
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
保留同一作者,但将提交者更改为当前 user.name 和 user.email in git-config.
如果您将使用 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
.
我想美化整个项目并正确格式化代码,但它会重写当前代码并使我成为大约 50% 代码的作者。我们的团队和我不希望这样。所以问题是:如何在所有作者保持不变的情况下更改存储库?我将这个过程理解为可能包含 2 个步骤的过程:1) 在一个单独的分支中进行大量更改的提交,然后 2) 将我作为此提交的每一行的作者还原为以前的作者。
这可能吗?我无法理解它。也许,还有另一种方法?我怎样才能做得更好?
我们使用 Bitbucket 存储库,使用 Qt Creator 作为 IDE,使用艺术风格作为美化工具。
任何帮助和建议将不胜感激。
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
保留同一作者,但将提交者更改为当前 user.name 和 user.email in git-config.
如果您将使用 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
.