git - 在 git 中“ float ”提交

标签 git merge rebase

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

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

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

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

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

现在我可以快进 merge 到 master

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

然后将master merge 到mirror中,并rebase到master上

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

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

  • 每个新提交都会自动应用到顶级提交的“下方”,
  • 每个 merge 或 cherry-pick 也会自动应用到顶级提交的“下方”,
  • 来自这样一个分支的 merge 从顶部提交的“下方”状态 pull 出?

最佳答案

一般来说,我会建议尝试摆脱这种配置提交情况。您不能只将配置存储在您的部署中吗?或者使用污迹滤镜,正如我在此处解释的:https://stackoverflow.com/a/13616911/758345

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

每个新提交都会自动应用到最上面的提交“下方”

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

  1. 记住您当前的分会负责人的 SHA
  2. 存储您的更改
  3. git reset --hard HEAD^
  4. stash 流行音乐
  5. promise
  6. 挑选你的老分行负责人

每个 merge 或 cherry-pick 也会自动应用到顶层提交的“下方”

同上:reset --hard,做你的工作,cherry-pick old branch head

来自这样一个分支的 merge 从顶部提交的“下方”状态 pull ?

这个很简单:git merge mybranch^


如果你不想改变你的工作目录,并且你的“config commit”修改的文件没有被你的其他操作触及,你可以这样做:

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

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

关于git - 在 git 中“ float ”提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14010807/

相关文章:

git revert 之后的 git rebase

Git 正在读取我的所有计算机文件,而不仅仅是一个文件夹。如何将 git 指向不同的文件夹?

clojure - 在 clojure 中延迟合并(分组)巨大序列

sql - Redshift - 合并两列

git - 当前分支中所有提交的 --preserve-merges 交互式 rebase

git - git fetch 的奇怪行为

Git推送需要用户名和密码

Git flow 发布分支和标签——带或不带 "v"前缀

git archive - 多个 git

node.js - 在 NodeJs 中合并一个非常大的列表的最佳方法是什么?