如何确定合并是否添加了新信息
How to determine if a merge adds new information
以下情况:
一些分支 encoder_dev 已合并到分支 encoder。 encoder 已合并到 integration,integration 已合并到 master。所有合并都是真正的合并。分支 encoder_dev 有另一个提交。
对应的提交图:
* ed9c5fa07889eb9db1294ef92efd75ea42df0143 (HEAD -> encoder_dev) [encoder_dev]: added signal C
| * 73ec0451e9ac23909fa6558c22a9996a2001fb1c (origin/master, origin/HEAD) included encoder changes
| |\
| | * 257e2dbfb16afb07cded3e17416048863be22e77 (origin/integration) Merge remote-tracking branch 'remotes/origin/encoder' into integration
| | |\
| | | * 0608a1965b10015d3b03d84e4cd2610c8f098f24 (origin/encoder, encoder) initial implementation
| | | |\
| | |/ /
| |/| /
| |_|/
|/| |
* | | abbbb126781839e3ff74282666515c9a547ff963 (origin/encoder_dev) [encoder_dev]: added entity and architecture
|/ /
* | ef425daf81becbe1e2fd5ae92d099d189cc3dbe0 (master) initial checkin; all files are empty
|\ \
| |/
| * 886e3783af21fe4138614f26b53c705839749b00 [integration]: added FILE_HISTORY to each file
|/
* cabcd5630133ebaac4f505e9f3759ae0e448cfac [***]: initial checkin
现在,origin/master 可以传输来自其他分支的贡献,但在这种情况下不能。如果我将 origin/master 合并到 encoder_dev,它不会为 [= 提供任何新信息51=],因为对代码的唯一更改是在对 encoder_dev 的最后一次提交中进行的,所有之前的更改都在 origin/master 和 origin/master 从那时起就没有代码更改。请注意,快进是不可能的。有没有办法自动检测这种情况?
您可以检查自 encoder_dev
和 origin/master
之间的分叉点以来落在 origin/master
上的差异:
git diff encoder_dev...origin/master # 3 dots notation
# the above is a shortcut to :
git diff $(git merge-base encoder_dev origin/master) origin/master
在您的情况下,它应该产生一个完全空的差异,这意味着自上次 encoder_dev
和 origin/master
之间的合并以来,没有其他修改被集成到 master
。
额外说明:
除非你有很好的理由保留两个不同的分支 encoder
和 encoder_dev
,否则你可以将你的新开发人员直接添加到 encoder
分支。
以下情况:
一些分支 encoder_dev 已合并到分支 encoder。 encoder 已合并到 integration,integration 已合并到 master。所有合并都是真正的合并。分支 encoder_dev 有另一个提交。
对应的提交图:
* ed9c5fa07889eb9db1294ef92efd75ea42df0143 (HEAD -> encoder_dev) [encoder_dev]: added signal C
| * 73ec0451e9ac23909fa6558c22a9996a2001fb1c (origin/master, origin/HEAD) included encoder changes
| |\
| | * 257e2dbfb16afb07cded3e17416048863be22e77 (origin/integration) Merge remote-tracking branch 'remotes/origin/encoder' into integration
| | |\
| | | * 0608a1965b10015d3b03d84e4cd2610c8f098f24 (origin/encoder, encoder) initial implementation
| | | |\
| | |/ /
| |/| /
| |_|/
|/| |
* | | abbbb126781839e3ff74282666515c9a547ff963 (origin/encoder_dev) [encoder_dev]: added entity and architecture
|/ /
* | ef425daf81becbe1e2fd5ae92d099d189cc3dbe0 (master) initial checkin; all files are empty
|\ \
| |/
| * 886e3783af21fe4138614f26b53c705839749b00 [integration]: added FILE_HISTORY to each file
|/
* cabcd5630133ebaac4f505e9f3759ae0e448cfac [***]: initial checkin
现在,origin/master 可以传输来自其他分支的贡献,但在这种情况下不能。如果我将 origin/master 合并到 encoder_dev,它不会为 [= 提供任何新信息51=],因为对代码的唯一更改是在对 encoder_dev 的最后一次提交中进行的,所有之前的更改都在 origin/master 和 origin/master 从那时起就没有代码更改。请注意,快进是不可能的。有没有办法自动检测这种情况?
您可以检查自 encoder_dev
和 origin/master
之间的分叉点以来落在 origin/master
上的差异:
git diff encoder_dev...origin/master # 3 dots notation
# the above is a shortcut to :
git diff $(git merge-base encoder_dev origin/master) origin/master
在您的情况下,它应该产生一个完全空的差异,这意味着自上次 encoder_dev
和 origin/master
之间的合并以来,没有其他修改被集成到 master
。
额外说明:
除非你有很好的理由保留两个不同的分支 encoder
和 encoder_dev
,否则你可以将你的新开发人员直接添加到 encoder
分支。