如何重写 Git 历史以匹配流行的 Git 工作流程

4
我希望您能翻译以下内容:这段主分支代码看起来更像是一个链表而不是树形结构。也就是说,我进行的大多数合并都是快进式合并。我考虑要按照“成功的Git分支模型”"(A successful Git branching model)"的工作流程进行操作,该模型指导我避免使用快进式合并,而是留下我的特性和特性分支连接的痕迹。这是一个好主意。

那么,如何最轻松地重新设计我的树形结构呢?

即假设我有这样的日志记录:

* hash1 great feature #1 - almost done
* hash2 side work
* hash3 side work
* hash4 great feature #1 - added y
* hash5 great feature #1 - added x
* hash6 documentation - added more docs
* hash7 documentation - removed stuff
* hash8 project-wide:  added deployment descriptors....

我想要这种类型的日志(或任何类似版本):
* merged side work into branch develop
|\
* * hash2 (feature branch) side work
* * hash3 (feature branch) side work
|/
*  merged great feature into branch develop
|\ 
* * hash1 (feature branch) great feature #1 - almost done
* * hash4 (feature branch) great feature #1 - added y
* * hash5 (feature branch) great feature #1 - added x
|/ 
* merged documentation into branch develop
|\
| * hash6 (feature branch) documentation - added more docs
| * hash7 (feature branch) documentation - removed stuff
|/
* hash8 project-wide (develop branch):  added deployment descriptors....

我已经有超过40个提交,我的代码树比我展示的要混乱得多,因此从init创建新分支并挑选单个提交是最困难的。我猜重新基于交互式可能有所帮助,但我不确定它是否有效。rebase会扁平化树,而我需要增加它。我已经展示了将feature分支合并到develop中,但在某些时候,我也可能将develop分支合并到master中。如何操作?

1个回答

0

如你所说,首先你没有太多的提交记录,所以你可以重写你的历史记录,问题是最后你将不得不使用 push --force 命令。

git rebase HEAD~40 -i

那么在这里,您可以通过将 pick 更改为 s (合并两个提交)并将提交消息更改为 e 来进行压缩。

正如您再次提到的那样,另一种解决方案是,历史记录只是历史记录,您可以跟踪以前的“工作流程”,并在任何时候开始新的工作流程。即使它不完美,您也会保留真实的历史记录。

我个人认为,尽可能地压缩,稍微编辑一下您的历史记录,并开始您的新工作流程。


我仍然有一些困惑,不知道这将如何运作。我不一定想压缩提交,但是我确实想从主分支创建新的功能分支,并将其合并回主分支。在变基期间,创建一个新分支似乎并没有什么用处。我有点困惑。我猜我确实需要跳过某些提交以便于为特定分支创建新的分支,并稍后将它们合并。变基似乎只适用于单个分支,或者也许我在使用它时出了问题。 - Dennis
对我来说,似乎我需要开始几个变基操作,为每个分支创建一个,然后在它们之间移动提交,以创建这个工作流程?如果是这样,也许我应该继续前进,将我的git历史保留原样。 - Dennis
根据您从其他分支合并到主分支的情况,您肯定需要定期重新设置您的分支。您还可以使用 git merge feature/branchA --no-commit --no-ff 来审查您的合并,进行一些更改或解决冲突,然后执行 git commit - Franck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接