合并分支后如何干净地执行git pull-with-rebase

时间:2020-02-14 13:37:14

标签: git merge squash

替代标题:如何压缩合并提交?

我的本​​地存储库中具有以下状态:

      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的影响)。

2 个答案:

答案 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}