我的本地存储库中具有以下状态:
C (origin/feature)
/
A - B - m (feature)
/
Y - Z (master)
我刚刚将更改从一个分支合并到另一个分支(例如,从master合并到我们的功能分支,反之亦然)。当我这样做时,提交B和Z是它们各自分支中的最新提交。
但是!混蛋丹刚刚将他的零钱推到了我要合并到(C)的分支中。现在,当我尝试推动时,我做不到。我首先必须获取更改并以某种方式合并它们。问题是:如何?
如果我使用rebase进行拉动,最终将不得不解决B&Z合并中的所有冲突。如果尝试合并,最终将导致两次合并提交,这不是很干净,并且也不是必须的。
C --
/ \
A - B - m - m2
/
Y - Z
有没有挤压m和m2的方法,像这样:
C --
/ \
A - B -- m3
/
Y - Z
一个交互式的基准库显然不显示合并提交,并且需要我重新解决所有合并冲突(在B和Z之间,它们根本不受C的影响)。
答案 0 :(得分:0)
如果您是在功能分支上进行操作,并且仅具有本地更改,建议您放弃本地合并,然后从C
重新合并。
# from your local 'feature' branch :
git checkout feature
# set your local branch to Dastardly Dan's version :
# WARNING: do save (or commit) your local changes before running reset --hard,
# they will be lost otherwise.
git reset --hard origin/feature
# you are now in 'C' state, merge master
git merge master
另一种选择是让Dan在合并(提交C
)之上重新设置其工作(在图表中提交m
)以达到:
A - B - m - C' <-feature, origin/feature
/
Y - Z <-master
答案 1 :(得分:0)
为了出发:
C --
/ \
A - B - m - m2
/
Y - Z
收件人:
C --
/ \
A - B -- m3
/
Y - Z
您可以按照this answer中的建议使用git commit-tree
:
git commit-tree -p C -p Z m2^{tree}