如何合并分支并保留作者身份
问题描述:
假设我的同事John创建了一个名为'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交互式可以帮助但不能理解。
答
这里的问题是git merge --squash
将应用与正常合并相同的更改,但不保留合并信息。然后,当你提交时,它与你所做的任何提交一样:它归因于你。您可以使用git commit --author="Original Author <[email protected]>"
更改提交的作者信息。有关--author
交换机的更多信息,请参阅git-commit(1)。
但是我的问题是:你为什么挤压合并?为什么不只是做一个非压缩的合并?如果任何人做了git blame
,它将被适当归因于原作者的提交。
答
如果你做到以下几点:
git checkout -b john origin/john
git rebase master
git checkout master
git merge --no-ff john # forces a merge commit to be recorded
你就可以既保留两者约翰的承诺和能够通过恢复的合并提交的SHA恢复合并的作者。
答
我刚做这一点的方式是通过重订挤压:
git rebase --onto master -i master remote/branch
然后在编辑器中,标记所有提交“南瓜”。这会产生一个与原作者相关的单个文件。虽然真的没有什么可以获得,而不是将原作者复制到作者身上。我只是觉得不舒服。
出于某种原因,我的头之后分离,所以我通过重新连接主吧:
git checkout -B master HEAD
答
您还可以--amend
作者身份之后,如果你已经做了合并。像这样:
git checkout master
git merge my_branch
git commit --amend --author="My Nick <[email protected]>"
git push origin master
这可以根据需要工作,并将指定的作者添加到合并提交。就那么简单。
这样我就可以轻松地回滚,因为在压扁之后它是需要回滚的单个提交。如果我不挤压,那么除非有更好的方法,否则将会有10个回合。 – 2010-07-22 11:59:57
正如在mfontani的回答中指出的那样,如果合并--no-ff,则会记录合并提交,并且如果您回滚该提交,它将与回滚压扁的提交具有相同的效果,但具有额外的好处记录完整的提交历史记录。 – 2010-07-22 20:26:00
做一个南瓜合并的一个原因是,有时候人们会把一堆破碎的状态提交给它们的分支,这会让分叉变得更难,但最终分支很好,有时分支只有一个作者。 – xenoterracide 2016-11-09 16:53:19