我们是一个使用 Git 的小公司,而且我们都是新手。在我们使用 Git 并开始尝试功能分支和发布分支的一两个月里,我们遇到了像这样由 merge 冲突等引起的意大利面条般的小事件:
黑线是我的开发分支。忽略红色那个。您将看到一个提交如何脱离该开发树然后又 merge 回来。是否可以通过压平树来清除一些旧蜘蛛网?我的头脑现在大约有 500 多个提交。
我读到可以通过 rebase 而不是 merge 来避免这种情况。
尽管这是一件微不足道的事情,但如果可能的话,我想解决这个问题,无论是出于强制症还是清晰度问题。
谢谢。
最佳答案
如果您确实想在提交后线性化历史记录 A
在主分支上,你总是可以这样做:
git checkout master
git rebase A
但是,这意味着您正在重写 master
的历史分支,所以如果你(强制)推送这个新版本,你必须向团队中的每个人介绍如何获取新版本并重置他们的主分支以匹配重写的版本。否则,人们可能会 pull ,这会将重写的分支与现有的分支 merge ,从而破坏练习的目标。
当有人在他们的 master 分支上创建提交,但服务器上的 master 同时移动时,这些小分歧通常会发生 - 这意味着当他们再次 pull 时,需要 merge 提交。您可以通过以下措施避免将来出现这种情况:
- 鼓励人们使用
git pull --rebase
- 告诉人们使用
branch.<name>.rebase
和branch.autosetuprebase
配置选项,这样他们就不会忘记添加--rebase
- 向服务器添加一个钩子(Hook) refuses pushes of non-linear history
但是,就我个人而言,我并不介意在历史记录中看到这些 merge - 借助良好的历史查看器,仍然可以非常清楚地了解发生了什么。
关于git - 纠正 Git 中旧的 merge 困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7270401/