我和我的团队(大约10个人)正在使用GitHub进行开发项目。我们有一个主要的develop
分支,从中创建功能分支以完成开发任务,然后再将功能分支合并回develop
分支。我们使用Pull Requests来进行代码审查。这都是标准流程。
然而,有一件事情一直在困扰着我。
假设开发人员A创建了一个名为myFeature
的功能分支。在该分支中,他对单个文件(例如Loop.java
)进行了一行更改。
与此同时,其他开发人员通过其他分支将100个不相关的提交合并到develop
分支中。
现在,在开发人员A推送其更改并发出pull request之前,他想确保他的更改能够与最新的develop
分支配合工作。因此,他将develop
的HEAD合并到自己的分支中:
git checkout develop
git pull
git checkout myFeature
git merge develop
# testing and stuff
git push origin myFeature
最后一个命令(git merge develop
)总是会产生一个新的提交。 因此,当开发人员A推送他的更改并发布myFeature
的拉取请求时,拉取请求的审核者将看到101个提交添加到分支myFeature
:其中一个具有对Loop.java
的更改,另外100个则无关且已经合并到了develop
中。它们只是噪音,掩盖了开发人员在此分支中实际上进行了哪些更改。
有没有一种简单的方法让审核人员只看到由开发人员A进行的更改,并"隐藏"来自与develop
的合并的提交?我特别考虑Pull Request视图中的"已更改文件"选项卡。(我知道可以使用“提交”选项卡,逐个查看所有提交以查看进行了哪些更改,但如果有很多提交,这可能很繁琐。我喜欢“已更改文件”选项卡的单一、最终视图。)
编辑:提出了git rebase develop
作为一个选项,但我认为这对我们的目的不适用。通常,多个开发人员将在myFeature
上工作,因此rebase有可能使每个人都出现问题,因为它重写了历史记录。
编辑2:正如@kan在下面友好地指出的,GitHub实际上表现得很好:是的,在拉取请求的“提交”选项卡中会显示合并提交(这完全没有问题),但在“已更改文件”选项卡下,仅列出此功能分支上更改的文件(而不是来自合并的文件)。这正是我要找的。
myFeature
分支是从develop
分支创建的,并且他将最新更改从develop
合并到了该分支,那么我认为GitHub上不应该出现数百个额外的提交记录,而只应该是该分支独有的提交记录。A是否正在向错误的分支发起拉取请求,例如向master
而不是develop
? - user456814develop
分支出来,然后合并到develop
,最后发起一个拉取请求合并到develop
。这也是我感到困惑的原因。 - stepthomrebase
、cherry-pick
或commit --amend
?A是使用命令行中的Git还是像GitHub for Windows这样的GUI?GitHub for Windows会隐式地进行奇怪的重写操作。 - user456814rebase
或其他任何东西。我能够在测试存储库上重新创建场景,进行非常简单的提交和更改:我将创建一个新分支myFeature
,进行更改,然后提交和推送。我会在GitHub上查看,并可以看到myFeature
上的单个提交。然后我将检出develop
,进行无关的更改并提交。然后我再次检出myFeature
,并执行git merge develop
,然后推送。我在GitHub上查看myFeature
分支的比较视图,它列出了两个提交。 - stepthom