1

在 git 的多个分支之间划分一组更改的“最佳”(阅读:“最简单”、“首选”、“正确”)方法是什么?例如,假设我在分支 X 上进行了一组(未提交的)更改,但确实需要将一些更改提交到分支 Y,其他更改到分支 Z,还有一些更改到分支 W;通常我会本能地做(就像这里推荐的一样) 是存储更改,签出 Y,应用更改,仅提交与 Y 相关的内容,然后对其他分支重复。我遇到的问题是,应用隐藏的更改通常会导致必须处理的合并冲突,如果我执行隐藏弹出而不是应用(这经常发生,对我来说是一个真正的风险!),我最终在 Y 分支中混合了针对 Z 的更改,并且必须手动解开它们。

有没有更好的办法?我怎样才能更好地处理这种情况?

请注意,我的问题与这样的问题有关但不同之处在于我寻求在多个分支之间划分当前一组更改的最佳方法。另请注意,在开发一组更改之前,我无法切换到 Y、Z 或 W;我必须从 X 开始并在 X 上开发一系列更改。

4

2 回答 2

1

git stash 和多个分支的问题是,一旦它被弹出,你必须再次为下一个分支存储。为了解决这个问题,只需使用一个临时分支就很容易了。

git checkout -b temp_branch
git commit -a -m 'Changes that will go to several branches.'
git checkout W
git cherry-pick -n temp_branch
(fixup all files here here)
git commit -a -m 'Changes for W.'
git checkout X
git cherry-pick -n temp_branch
(fixup all files here here)
git commit -a -m 'Changes for X.'
git checkout Y
git cherry-pick -n temp_branch
(fixup all files here here)
git commit -a -m 'Changes for Y.'
git checkout Z
git cherry-pick -n temp_branch
(fixup all files here here)
git commit -a -m 'Changes for Z.'
git branch -D temp_branch
于 2013-07-10T13:07:28.190 回答
1

避免合并问题的一种方法是在原始分支中进行多次提交,然后从目标分支中挑选它们,最后回滚更改。

像这样:

git add -i
git commit -m 'changes for X'
git add -i
git commit -m 'changes for Y'
git log -n 2 # to see hashes
git checkout X
git cherry-pick <hash of the first commit>
git checkout Y
git cherry-pick <hash of the second commit>
git checkout original_branch
git reset --hard HEAD~2
于 2013-08-27T07:20:33.483 回答