git
是一个很棒的工具;但是,它不能代替开发人员之间的良好沟通。
您必须询问 中的更改是否也master
必须包含在feature
. 理想情况下,功能分支应该具有尽可能少的代码量。
如果更改绝对必须包含在 中feature
,那么您基本上有两种选择git rebase
:并且,git cherry-pick
。master
我想你可以从into执行向后合并feature
;但是,这可能会导致糟糕的情况......
cherry-pick
允许您将特定提交或多个提交应用于当前HEAD
,保留评论和作者信息。成功cherry-pick
ed 后,git 足够聪明,可以知道两个提交在合并feature
回master
. 如果只是我们正在谈论的几个提交,那么cherry-pick
应该就足够了。
rebase
允许您从历史的不同点开始应用当前分支(提交行)。正如您所指出的,这对于已经拥有feature
. 他们还需要将rebase
他们的本地开发转移到新 feature
的分支上。
无论如何,master
developer3 直接提交的内容应该在它自己的功能分支中,并且该功能分支应该已经合并。然后可以根据需要合并该功能分支feature
。假设只有一个(最近的)提交master
,您可以按如下方式纠正这种情况:
# Ensure clean working directory
$ git stash
# Create new branch at master
$ git branch some-descriptive-name master
# Move master back one commit
$ git checkout master
$ git reset --hard HEAD^
# Merge the new branch into master
$ git merge --no-ff some-descriptive-name
# Forcibly update master
# YOU SHOULD COMMUNICATE WITH OTHER DEVS BEFORE DOING THIS
$ git push -f origin master
# Merge the new branch into feature
$ git checkout feature
$ git merge --no-ff some-descriptive-name
我怎么强调良好沟通的价值都不过分,因为这类“糟糕”的事情可以而且确实一直在发生。
祝你好运!
编辑:
关于cherry-pick
ing 的部分是在假设只有几个提交(或只有一个)master
并且它们都会被cherry-pick
ed 的情况下编写的。
x -- y (master)
\
a -- b -- c (feature)