让我们说我的同事约翰创建了一个名为'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可以提供帮助但不太了解。
答案 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