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

问题描述:

假设我的同事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,它将被适当归因于原作者的提交。

+1

这样我就可以轻松地回滚,因为在压扁之后它是需要回滚的单个提交。如果我不挤压,那么除非有更好的方法,否则将会有10个回合。 – 2010-07-22 11:59:57

+2

正如在mfontani的回答中指出的那样,如果合并--no-ff,则会记录合并提交,并且如果您回滚该提交,它将与回滚压扁的提交具有相同的效果,但具有额外的好处记录完整的提交历史记录。 – 2010-07-22 20:26:00

+0

做一个南瓜合并的一个原因是,有时候人们会把一堆破碎的状态提交给它们的分支,这会让分叉变得更难,但最终分支很好,有时分支只有一个作者。 – xenoterracide 2016-11-09 16:53:19

如果你做到以下几点:

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恢复合并的作者。

+0

真的很棒。我想我应该自己做一些测试,如果我提交使用git merge --no-ff john,那么我会在约翰的主日志中看到10个提交,或者我会看到一个提交,因为我会在压扁的情况下看到提交。我不介意在日志中记录10条信息。我唯一担心的是我应该能够轻松恢复。 – 2010-07-22 14:12:20

+0

您将看到所有提交的提交内容,但只需恢复合并提交即可撤销合并。 此外,你跟踪哪些提交属于哪个分支:) – mfontani 2010-07-22 21:01:09

+0

我期待着听到上述问题是否适合你,因此回答你原来的问题。 – mfontani 2010-07-27 10:06:23

我刚做这一点的方式是通过重订挤压:

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 

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