让我们说我的同事约翰创建了一个名为"约翰"的分支.约翰有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可以提供帮助但不太明白.
这里的问题是,git merge --squash
它将应用与普通合并相同的更改,但不保留合并信息.然后,当你提交时,它与你所做的任何提交相同:它归于你.您可以使用更改提交的作者信息git commit --author="Original Author <email@server>"
.有关交换机的更多信息,请参阅git-commit(1)--author
.
但我的问题是:你为什么要压缩合并?为什么不做一个非压缩合并?如果有人做了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
Run Code Online (Sandbox Code Playgroud)
您既可以保留John提交的作者身份,又可以通过还原合并提交的SHA来恢复合并.
--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)
这可以根据需要工作,并将指定的作者添加到合并提交.就那么简单.
我刚做的方法是通过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)