如何合并分支并保留作者身份

时间:2010-07-22 01:50:21

标签: git

让我们说我的同事约翰创建了一个名为'john'的分支。约翰有10个承诺。当谈到合并回主人时,他们要求我合并。

这就是我的工作

git checkout -b john origin/john
git rebase master
git checkout master
git merge john --squashed
git add .
git commit -m 'merged branch john'

然而现在发生的事情是它是我对合并提交的id。后来人们问我为什么要更改代码的某些部分。

如何将john分支中的所有comit折叠成一个提交,以便John是作者。我猜git commit interactive可以提供帮助但不太了解。

4 个答案:

答案 0 :(得分:8)

这里的问题是git merge --squash将应用与普通合并相同的更改,但不保留合并信息。然后,当你提交时,它与你所做的任何提交相同:它归于你。您可以使用git commit --author="Original Author <email@server>"更改提交的作者信息。有关--author切换的详细信息,请参阅git-commit(1)

但问题是:你为什么要挤压合并?为什么不做一个非压缩合并?如果有人做了git blame,那么它将适当地归因于原作者的提交。

答案 1 :(得分:8)

如果您执行以下操作:

git checkout -b john origin/john
git rebase master
git checkout master
git merge --no-ff john # forces a merge commit to be recorded

你们都可以保留John的提交的作者身份,并且能够通过恢复合并提交的SHA来恢复合并。

答案 2 :(得分:6)

如果您已经进行了合并,您之后也可以--amend作者身份。那样:

git checkout master
git merge my_branch
git commit --amend --author="My Nick <my.adress@email.com>"
git push origin master

这可以根据需要工作,并将指定的作者添加到合并提交。就这么简单。

答案 3 :(得分:4)

我刚才这样做的方法是通过rebase压缩:

 git rebase --onto master -i master remote/branch

然后在编辑器中,标记所有提交“壁球”。这会产生一个附有原作者的单一作品。虽然没有什么可以获得,而不是将原作者复制到--author。我只是感到不舒服。

出于某种原因,我的HEAD之后被分离了,所以我通过以下方式重新连接了主人:

 git checkout -B master HEAD