git:如何在不接管的情况下解决合并冲突'blame'

git: how to resolve merge conflicts without taking over 'blame'

对于我的 github 存档,我收到了一个拉取请求,我想在合并之前先对其进行测试,因此使用了 github 推荐的命令行命令(contrib1 代表贡献者的用户名, patch1 拉取请求的名称, repo 存储库的名称)

   git checkout -b contrib1-patch1 master
   git pull https://github.com/contrib1/repo.git patch1

因为我事先做了一些更改,所以解决了一个(微不足道的)合并冲突,我通过编辑 file1 解决了这个问题。该补丁还包括对其他文件 file2 的非冲突更改,...

然后我再次遵循 github 的建议:

   git add file1
   git checkout master
   git merge --no-ff contrib1-patch1
   git push origin master

合并命令产生了一条消息 "already up-to-date" 然后我发现我没有先提交,所以基本上重复了这个过程:

   git commit -m "Implements patch1 by contrib1" repo
   git checkout master
   git merge --no-ff contrib1-patch1
   git push origin master

同样,git merge --no-ff 导致消息 "already up-to-date"。存储库现在是正确的,但表明我自己是所有文件更改的发起者,而不仅仅是冲突行,从将功劳分配给外部贡献者的角度来看,我觉得这很糟糕。

问题是下次我应该使用什么顺序的命令来避免这种情况并确保补丁作者显示在 blame 或 history 视图中?请注意,我不关心更改上面补丁的历史记录,我只想为下一个补丁做正确的事情。如果我没有忘记 commit(显然是 'local' 问题),很可能会出现同样的问题,但万一它很重要,我觉得我应该报告它。

使用git rebase -i然后通过

设置提交的原作者
 git commit --amend --author "Original Author Name <email@address.com>" 

有关如何更改作者的更多详细信息here。根据记忆,有一些额外的环节可以跳过以更改合并提交的作者身份,但鉴于您进行了合并,这似乎没问题。