5

在我们的一个项目中,像往常一样,我们有一个主分支。基于此是部署分支,其中设置被修改。同样基于此的是运行部署镜像的镜像分支。master 分支不应包含任何配置更改补丁。

镜像分支中开发了小功能和修复。所以添加一个特性后,它看起来像这样:

master:      history ┐
deployment:          ├─ deployment-config
mirror:              └─ mirror-config ── feature

现在要将功能移回主控,我首先必须重新排序镜像分支中的补丁:

master:      history ┐
deployment:          ├─ deployment-config
mirror:              └─ feature ── mirror-config

现在我可以快进合并到主

master:      history ┬─ feature ┐
mirror:              │          └─ mirror-config
deployment:          └─ deployment-config

然后将master合并到mirror中,并将其rebase到master上

master:      history ── feature ┐
mirror:                         ├─ mirror-config
deployment:                     └─ deployment-config

是否有插件或工具可以自动执行此操作,以便

  • 每个新提交都会自动应用到顶部提交的“下方”,
  • 每个合并或樱桃选择也会自动应用到顶部提交的“下方”,
  • 来自这样一个分支的合并从“低于”最高提交的状态中提取?
4

2 回答 2

4

一般来说,我建议尝试摆脱这种配置提交情况。您不能将配置存储在您的部署中吗?或者使用涂抹过滤器,正如我在这里解释的那样:https ://stackoverflow.com/a/13616911/758345

如果这不是一个选项,让我回答你的问题,因为 git 中的分支非常轻量级,因此有更简单的方法可以实现你想要的。这些都不是完全自动化的,但非常简单,您绝对可以为此编写一些小脚本。

每个新提交都会自动应用到顶部提交的“下方”

不太确定情况,但假设您进行了更改并想要提交它们:

  1. 记住你当前的分支头的 SHA
  2. 隐藏您的更改
  3. git reset --hard HEAD^
  4. stash pop
  5. 犯罪
  6. 挑选你的旧分支头

每个合并或樱桃选择也会自动应用到顶部提交的“下方”

同上:reset --hard,做你的工作,樱桃采摘老分支头

来自这样一个分支的合并从“低于”最高提交的状态中提取?

这个很简单:git merge mybranch^


如果您不想更改您的工作目录,并且您的“配置提交”修改的文件没有被您的其他操作触及,您可以这样做:

  1. 记住你当前的分支头的 SHA
  2. 进行软复位:git reset HEAD^
  3. 通过 git 忽略你的配置文件git update-index --assume-unchanged
  4. 创建你的提交
  5. 运行git update-index --no-assume-unchanged您的配置文件
  6. 再次提交——这将重新创建您的配置文件。

--assume-unchanged如果您通过脚本自动执行此操作,您可以使用 git通过查看配置提交来获取配置文件列表。如果您不想自动执行此操作,您可以跳过第 3 步和第 5 步,并确保您没有在第 4 步中提交您的配置文件。

于 2012-12-24T04:09:18.697 回答
0

可以自动重新排序的是 a git rebase -i --autosquash,它可以根据提交消息为您重新排序/压缩提交:

如果您知道要将某些内容压缩到哪个提交中,则可以使用“<code>squash!$other_commit_subject”。
然后如果你运行git rebase --interactive --autosquash commitish,该行将自动设置为squash,并放置在主题为的提交下方$other_commit_subject

(更多细节在“修剪 GIT Checkins/Squashing GIT History ”的第二部分)

这可能是一个促进“功能”提交重新排序的想法,特别是如果您将“功能”和“镜像配置”提交混合在一起。

重新排序后,rebase --onto可以将这些功能合并移动到正确的分支。
参见例如“复杂的 git rebase 操作”。

除此之外,我不知道有任何插件可以自动执行这些任务:所有关于git rebase.

于 2012-12-23T13:51:51.640 回答