Git:如何更新merge base生成的分支

Git:如何更新merge base生成的分支,git,git-merge,merge-base,Git,Git Merge,Merge Base,假设我有两个分支:v1.0和development。 我们的流程是使用以下工具创建本地分支机构: git merge-base v1.0 development git checkout <commit-hash> git checkout -b <new-branch-name> git merge base v1.0开发 git签出 git签出-b 假设我的一位同事遵循相同的流程,最近通过以下方式进行了更改: git checkout v1.0 git merge

假设我有两个分支:
v1.0
development
。 我们的流程是使用以下工具创建本地分支机构:

git merge-base v1.0 development
git checkout <commit-hash>
git checkout -b <new-branch-name>
git merge base v1.0开发 git签出 git签出-b 假设我的一位同事遵循相同的流程,最近通过以下方式进行了更改:

git checkout v1.0
git merge <his-local-branch-name>
git push
git checkout development
git merge <his-local-branch-name>
git push
git签出v1.0
git合并
git推送
git签出开发
git合并
git推送
我的问题是,我如何用他最近的变化轻松地更新我的本地分支机构

我所做的是使用merge base创建另一个分支,其中包含最近的更改,并将其与本地所做的更改合并


但它存在一些简单的方法吗?我在考虑类似于git merge的东西,但它会产生很多冲突。

好的。。。所以听起来
development
是一个长期存在的分支,代表了以前的版本-很像gitflow中的
master

这听起来像是
v1.0
是一个长期存在的分支,您将在其中组装下一个版本,很像gitflow中的
develope

给定的本地分支可能类似于功能分支(在这种情况下,您将其合并到
v1.0
)或类似于热修复程序(在这种情况下,您将其合并到
v1.0
开发
)。奇怪的是,您似乎总是创建本地分支,以便将它们合并到这两个分支中。(所以,在创建分支时,您不知道是否要合并到
开发
?因为如果不是这样,在合并基础上使每个分支“重新开始”似乎有一些不必要的合并解决成本……但我离题了。)

让我们通过图片逐步了解您的场景。你从

A -- x <--(development)
 \
  Z <--(v1.0)
现在,考虑到
功能
也是本地的(仅存在于您的回购中),一个选择是将其重设为新的合并基础-这似乎仍然是您工作流程的精神所在

git rebase $(git merge-base development v1.0) feature
我会给你

A -- x -- M <--(development)
|\       /
| x --- O -- B' -- C' <--(feature)
 \       \
  Z ----- M <--(v1.0)
这让你觉得

A -- x -- M <--(development)
|\       /
| x --- O -----------
|\       \           \
| Z ----- M <--(v1.0) \
 \                     \
  B -- C -------------- M <--(feature)
$ git checkout -b test master...
A--x--M
我所做的是使用merge base创建另一个分支,其中包含最近的更改,并将其与本地所做的更改合并

这是一种方法(举例说明了重定基础方法)

但并非如此,使用Git 2.22(2019年第2季度),您不必执行以下操作:

git merge-base v1.0 development
git checkout <commit-hash>
git checkout -b <new-branch-name>
它会因为这个消息而失败

fatal: Not a valid object name: 'master...'.
这是由调用
create\u branch
导致的,其中
start\u name
是 预期为有效版本。
但是,
git checkout
允许分支 是有效的合并基准版本(即带有“
”),因此 要传入的版本无效

使
create_branch
接受合并基本版本,以便此案例不会 出错

作为一个副作用,教git branch如何作为 嗯


等等……为什么他要将他的本地分支合并到
v1.0
development
?那个地方对我来说有味道。@TimBiegeleisen我也是,但这应该被视为我们的“业务需求”。有些错误修复必须应用于过去和将来的版本。。。
git checkout feature
git merge $(git merge-base v1.0 development)
A -- x -- M <--(development)
|\       /
| x --- O -----------
|\       \           \
| Z ----- M <--(v1.0) \
 \                     \
  B -- C -------------- M <--(feature)
git merge-base v1.0 development
git checkout <commit-hash>
git checkout -b <new-branch-name>
git checkout -b <new-branch-name> v1.0...development
$ git checkout -b test master...
fatal: Not a valid object name: 'master...'.