1

使用 git 进行项目时,我有两个功能分支,分别称为dev-adev-b,从我的develop分支(从 分支master)分支。

我工作dev-a了一段时间,完成了,然后合并回develop,做了一些工作develop,然后开始dev-b,工作了一段时间,然后找到了应该做的事情dev-a,所以我结帐dev-a并修复它。我的 DAG 现在看起来像这样:

提交哈希显然是虚构的,而不是真正的哈希;它们仅供参考

*   008 - (dev-a) Fix problem on dev-a
|
| * 007 - (dev-b) Work on dev-b
| * 006 - Work on dev-b
| |
| * 005 - (develop) Work on develop
| * 004 - Work on develop
| * 003 - Merged dev-a
|/|
* | 002 - Work on dev-a
* | 001 - Work on dev-a
 \|
  * 000 - Work on develop
  |

不过,我想做的是让提交发生在合并“之前”,这样我就可以重新设置基准developdev-b在它之上,保持一切整洁:

  * 007 - (dev-b) Work on dev-b
  * 006 - Work on dev-b
  |
  * 005 - (develop) Work on develop
  * 004 - Work on develop
  * 003 - Merged dev-a
 /|
* | 008 - (dev-a) Fix problem on dev-a
* | 002 - Work on dev-a
* | 001 - Work on dev-a
 \|
  * 000 - Work on develop
  |

同样重要的是要注意,修复dev-a不会与任何以后的提交冲突 - 这是对单个文件的一个相当小的更改。所有相关的提交都是本地的,尚未共享。

我相当肯定我可以做到这一点,因为 git 相当灵活,但我不确定它是否可能,如何做到这一点,或者这是否是一个好主意。

4

1 回答 1

2

这一切都非常简单,只需再次合并并根据它重新调整所有内容。

# make a branch of the 'develop' right before the merge
git checkout -b new-base 000 
# merge again
git merge dev-a

git checkout develop
# it moves all 'develop' commits made after the merge onto the new base.
git rebase new-base

git checkout dev-b
# moves all 'dev-b' commits onto the rebased 'develop'.
git rebase develop

# drop it, I don't think it has any value now.
git branch -d new-base
于 2012-07-26T15:17:56.800 回答