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...'.