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

Nic*_*ilt 16 git

让我们说我的同事约翰创建了一个名为"约翰"的分支.约翰有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'
Run Code Online (Sandbox Code Playgroud)

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

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

Jos*_*ros 9

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

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

  • 这样我就可以轻松回滚,因为在压缩之后,它是一个需要回滚的单一提交。如果我不压缩,那么除非有更好的方法,否则将需要回滚 10 次提交。 (4认同)
  • 正如mfontani的回答所指出的,如果你合并--no-ff,将会记录一个合并提交,如果你回滚那个提交,它将具有与回滚压缩提交相同的效果,但具有额外的好处记录完整的提交历史记录. (2认同)
  • 进行挤压合并的一个原因是,有时人们将一堆损坏的状态提交到他们的分支,这使得平分变得更困难,但最终的分支很好,有时分支只有一个作者。 (2认同)

mfo*_*ani 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
Run Code Online (Sandbox Code Playgroud)

您既可以保留John提交的作者身份,可以通过还原合并提交的SHA来恢复合并.


Afr*_*Afr 6

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

git checkout master
git merge my_branch
git commit --amend --author="My Nick <my.adress@email.com>"
git push origin master
Run Code Online (Sandbox Code Playgroud)

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


mir*_*e2k 5

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

 git rebase --onto master -i master remote/branch
Run Code Online (Sandbox Code Playgroud)

然后在编辑器中,将所有提交标记为“ squash”。这样就产生了一个附有原始作者的文件。尽管与将原始作者复制到--author相比,您实际上没有任何收获。我只是觉得不舒服。

由于某种原因,我的HEAD之后被分离了,所以我通过以下方式将master重新连接到它:

 git checkout -B master HEAD
Run Code Online (Sandbox Code Playgroud)