我正在开发我们当前发布的分支“base”,它将很快发布。最后一刻我的功能被拔出,我在基础分支上有一些未推送的更改。这是一个很大的集合,包括大约400次提交的巨大合并。由于它被推,我不能把它推到基地。另外,我不想重新合并。
所以,我想知道我是否可以这样做:
来自具有合并更改的树,分支一个新分支,说“post-release”,然后将其推送到存储库而不更改基础。可能吗?我想防止意外提交基础(我看到有时多个refs在一次推送中得到更新)。
此图表可能有助于查看问题。
master
------------------------------------------->
\
\---release1--->
\
\--base (releasing soon)------>
(I have some changes merged on a local tree
based off "base" but not pushed to base)
由于base将被释放,我不想推送我的本地更改,而是在某些分支中保留这些更改(我可以将其推送到repo。)。
理想情况下,我应该开始创建一个基于“基础”分支的分支,然后合并它,但我没有这样做。
答案 0 :(得分:1)
首先,如果你担心的是保存合并,那就是rerere
的用途。
除此之外,你想要做的事情是:在分支中“保存”你的变化很容易。
只需git branch my_new_branch
,然后git reset --hard base
(确保首先提交所有工作副本更改!reset --hard
删除非索引更改!)。现在,您有两个分支,当前HEAD
位于(和{{1}}处,而第二个分支(base
)仍然包含您未经撤消的更改并跟踪my_new_branch
。您可以根据需要多次使用base
或git merge
,以便在重新整合git rebase
之前使my_new_branch
保持最新状态。
答案 1 :(得分:1)
我不确定我理解你的问题。从图中我们可以尝试构建一些新的图表。显然你有一个远程共享仓库:
[master] * --- [possibly more commits]
\
[release1] * --- A --- B --- C
\
[base] D --- E
在你自己的私人回购中:
[master] * --- [possibly more commits]
\
[release1] * --- A --- B --- C
\
[base] D --- E
\
[devel] F --- G --- I --- J
\ /
--- H --------
这样分支“devel”的尖端是提交J,它是FGI + H的合并,都指向D(在“base”中),指向“A”(在release1中)。现在有人计划通过合并ABC + DE来发布他们将会发布的“release2”吗?
如果你希望你的“devel”分支基于该合并,你只需要重新定义合并的结果(它还不存在,所以你必须等待)。
或者,也许您的意思是上面的远程共享仓库或多或少准确,但您不拥有自己的“devel”分支。也许你的(本地)repo commit-tree看起来更像是这样:
[master] * --- [possibly more commits]
\
[release1] * --- A --- B --- C
\
[base] D --- E --- F --- G --- I --- J
\ /
--- H ---------
如果您希望它看起来像这样:
[master] * --- [possibly more commits]
\
[release1] * --- A --- B --- C
\
[base] D --- E
\
[devel] F --- G --- I --- J
\ /
--- H ---------
然后你可以从创建一个挂起提交E:
的“devel”分支开始git branch devel E # use the commit-ID for commit E
然后重新指向本地分支“base”以提交E:
git branch -d base; git branch base E # again you'll want the sha1
# or: git update-ref refs/heads/base E
并且你已经完成了(现在,无论如何;你最终还是要在以后修改你的“devel”分支。)