可能的解决方案取决于您的工作流程。
选项 1:重写历史
如果您不将分支推送到远程存储库,您可以在主分支上提交错误修复,因为这是文件的共同起点a.java
。之后,您可以重新调整每个分支以包含此更改。
选项 1a:仅重写主题分支的历史
另一个工作流基于约定。您可以在推送主分支时将主题分支推送到服务器。惯例是,这些主题分支永远不会合并到主分支中,并且允许重写历史。主题分支可以是一个开发人员私有的,也可以在其他人之间共享。对于后一种情况,小组必须在变基发生之前和之后进行协调。主题分支工作完成后,分支会根据主分支重新设置基础,并且可以轻松应用快进分支。
选项 2:Cherry pick
如果您将分支推送到远程存储库,则不建议重写历史记录。简而言之,您唯一的选择是在每个分支的顶部提交一个错误修复。为了避免两次做同样的工作,git cherry-pick
推荐的命令是(正如亚当和阿尔伯特已经说过的那样)。
选项 3:将 master 合并回每个主题分支
这是亚当答案的 git 部分。您可以在master分支上提交错误修复,这是受影响文件的公共起点。然后,您可以将master合并回主题分支。这实际上与使用同时在主分支上发生的所有更改更新主题分支相同。这个缺点是您不能单独选择错误修复。这是git cherry-pick
允许的(参见选项 2)。
注意:
如果您不打算合并两个分支,您实际上可以database-1.xml
为每个分支上的特定配置使用相同的文件。
项目设置
除了使用 git 的不同方式之外,我完全同意 Adam 的回答,因为您绝对应该重新考虑您的项目设置并创建一个允许您指定不同环境的配置文件。一个很好的例子是您可能知道的 RubyOnRails 项目的数据库配置文件。
// Rails project: config/database.yml
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
test:
adapter: sqlite3
database: db/test.sqlite3
pool: 5
timeout: 5000
production:
adapter: mysql2
encoding: utf8
reconnect: false
database: myapp_production
pool: 5
username: username
password: password
socket: /var/run/mysqld/mysqld.sock