一种常见的做法是为您的增量更改创建一个主题分支,该分支基于最适合开发所寻求的特定主题/功能/错误修复的分支。然后主题分支被合并到您的两个分支中并被丢弃。合并不会覆盖您的历史记录,相反,它会全部存在,完全保留。
/-- * -- * -- * -- A
*-- old history -- *
\-- * -- * -- * -- * -- B
正如您所描述的,假设是A
并且B
将来永远不会合并。当您需要添加一个功能时,您可以选择 A 或 B,无论哪个更适合该特定情况,然后在那里开发:
/-- * -- * -- * -- C
/-- * -- * -- * -- A
*-- old history -- *
\-- * -- * -- * -- * -- B
然后将 C 合并到 A 和 B 并丢弃它:
/-- * -- * -- * -- C --\
/-- * -- * -- * ----------------------*[merge] -- A
*-- old history -- *
\-- * -- * -- * -- .. --*[merge] -- B
(我错过了从 Henri Matisse 学习 ASCII 艺术课程的机会。)
这是非常简单的事情:
$ git checkout A
$ git branch C
$ git checkout C
$ develop.sh 24h commit commit commit
$ git checkout A
$ git merge C
$ git checkout B
$ git merge C
$ git branch --delete C
现在运行: $ git log --oneline --graph 您应该能够看到更好的 ASCII 艺术作品 您会看到合并并没有破坏您的任何历史记录。当然,您不需要 --graph 为此,它也可以通过 plain 看到git log
。