Git 与 --squash 合并,同时保留每次提交的日志

2024-01-12

初始场景:

A (master)
 \
 B - C  - D (development)

合并后我想要什么——squash:

A     -     E (master/development)
 \         /
 B - C - D 

在树枝上master, git log将会

commit E
    Squashed commit of the following:
    commit D
    commit C
    commit B
commit A

在分支上继续开发development:

A     -     E (master)
 \         / \         
 B - C - D    F - G - H (development)

再次与南瓜合并:

A     -     E     -     I(master/development)
 \         / \         /
 B - C - D    F - G - H

在树枝上master, git log将会

commit I
    Squashed commit of the following:
    commit H
    commit G
    commit F
commit E
    Squashed commit of the following:
    commit D
    commit C
    commit B
commit A

在树枝上development, git log将会

Commit I
Commit H
Commit G
Commit F
Commit E
Commit D
Commit C
Commit B
Commit A

我想合并压缩的提交master同时保持每一个承诺development.

我不知道如何实施。我的问题是我不知道如何制作D指向E在第一次合并中,并且I会包括B,C,D,E,F,G,H代替F,G,H only.


您无法使用您显示的结构获得您想要的日志结果(git log --merges master会做的)。将为您提供所需日志的结构打败了这一点。最后,这是一种弄巧成拙的 Git 工作方式。


愿望是能够奔跑git log master并且只看到压缩的提交。这行不通。 Git 不知道某些提交的目的是master有些是为了development。让我们看看建议的结构。

A     -     E     -     I [master] [development]
 \         / \         /
 B - C - D    F - G - H

在此刻,master and development指向同一个提交。就 Git 历史而言它们是相同的。分支只不过是指向提交的标签。提交不记得他们提交到哪个分支. git log master and git log development将生成相同的日志,显示从 A 到 I 的所有提交。E 和 I 压缩的提交日志将是多余的。

You can得到你想要的git log --merges master (or development)仅显示合并提交,但这会显示any合并提交,即使是作为其中一部分完成的提交development。所以它实际上不起作用。

整个想法不必要地复杂,请继续阅读。


要获得您想要的日志结果,您必须像这样打破两个分支之间的关系。

A     -     E     -     I [master]
 \                   
 B - C - D - F - G - H [development]

你可以以某种方式让它发挥作用,但没有意义。git log master包含所有相同的日志消息,因此它只要git log development,但它们会被粉碎在一起。你不能使用git log master进行代码考古(即“为什么这一行是这样写的”),因为所有更改都被整合到一个差异中,使得将一行更改与特定提交消息关联起来变得更加困难。自有历史以来master and development是分离的,没有办法确保开发中的所有内容都成为主控,反之亦然(例如,主控的热修复)。

git log master提供信息较少 than git log development这是更难理解. master与 没有任何关系development并失去保留合并历史记录的所有好处。维护这种复杂的设置是没有意义的。


相反,使用git merge --no-ff合并feature分支(不是一个连续的“发展”分支)并保留分支历史以便于考古。

              G - J [feature/tacos]
             /
A     -     E     -     K [master]
 \         / \         /
 B - C - D    F - H - I

E 和 K 是正常的合并提交,由git merge --no-ff。没有连续的development分支,由功能分支处理。功能分支是一次性的,合并后就会被删除。有关功能分支的信息保留在合并提交中,并且git merge --no-ff保证分支结构被保留。feature/tacos是一个用于尚未合并的 tacos 的功能分支。

git log --graph --decorate master将显示 master 的完整历史记录,其中显示功能何时结束的合并提交,以及说明分支历史记录的行。 GUI Git 历史记录工具,例如GitX http://rowanj.github.io/gitx/是另一种以图表形式读取历史的方法。

最后,Git 历史是一个图表。如果你学会了如何使用该图,Git 的生活就会容易得多。如果你试图让 Git 历史线性化,就像一大堆煎饼一样,那么你就违背了 Git 的初衷,并为自己和其他人创造了额外的工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git 与 --squash 合并,同时保留每次提交的日志 的相关文章

  • 无法使用 Git 部署从多项目解决方案部署正确的网站到 Azure

    我有一个解决方案 它有一个 mvc 网站 WebApplication1 该网站依赖于解决方案中的另一个项目 WebAppCore 源代码托管在 Visual Studio Online 上的 git 中 我配置了持续集成 一切都构建得很好
  • GIT:提交时“致命:无法写入 new_index 文件”

    当我尝试将更改提交到本地存储库时 我收到以下消息 致命 无法写入 new index 文件 As this 线程说明 http luhman org blog 2010 04 05 git fatal unable write newind
  • 为 RHEL 6 安装/构建 git-svn

    我无权访问 RHEL6 存储库 那么在 RedHat Enterprise Linux 6 上构建和 或安装 git svn 工具的最佳方法是什么 通过卸载现有的 yum擦除git 并从源安装最新的来设法安装git和git svn 1 7
  • 使用Git记录文件复制操作

    当我使用 git mv 在 git 中移动文件时 状态显示该文件已被重命名 即使我更改了某些部分 它仍然被认为几乎是相同的东西 这很好 因为它让我可以跟踪它的历史记录 当我复制文件时 原始文件有一些历史记录 我想将其与新副本关联起来 我尝试
  • 哪些 git hooks 适用于“git rebase --continue”?

    我正在尝试为我的组织构建一组 git hook 脚本 我想使用的一个脚本 仅用于我自己的多个项目 将是检查git rebase continue我的代码中没有留下任何冲突标记 lt lt lt lt lt or gt gt gt gt gt
  • 使用BFG时可以指定多个文件吗?

    我正在尝试删除通配符无法覆盖的多种类型的文件 我尝试使用多个 delete files 但它不接受它 还尝试将文件全部放在 delete files 之后 但它也不接受它 有没有一种方法可以将它们全部放在一个命令中 如果没有 那么我必须运行
  • Gitolite git 克隆错误

    我正在尝试在我的服务器 Macos 服务器 上设置 gitolite 我按照此处找到的安装文档中的说明进行操作 http sitaramc github com gitolite doc 1 INSTALL html http sitara
  • Git checkout 不会丢弃我的更改

    我在 Windows XP 上使用 git 1 7 1 和 cygwin 这个问题可以通过例子得到最好的说明 git status On branch master Changed but not updated use git add
  • 如何更改 GitHub 上的文件模式?

    git add test file git commit m first commit create mode 100644 test file git push git update index add chmod x test file
  • 为什么“git pull”在我的网络服务器上失败?

    我使用 git 来提取站点代码库的更改 文件内部的更改和文件删除是有效的 但是 当我将新文件或目录 不是空的 添加到存储库时 它不会被本地拉到网络服务器 拉动时不会显示错误消息 但在检查该文件时 它不在那里 在线的 bitbucket re
  • npm install 的问题(Angular)

    今天我尝试创建一个新项目 所以我使用这个命令 ng new NAME style less 并在我的cmder中弹出错误和警告 所以我卸载了 Roaming npm 和 npm cache 中的节点和文件 然后我安装了node并再次下载cm
  • 使用 git 合并两个截然不同的分支?

    我有我的master分支和我的verydifferentbranch它们有相同的祖先 大约 300 次提交前 现在verydifferentbranch功能完整我想把它放在master下面branch 进行变基会导致每个补丁都有很多合并冲突
  • Git:文件“已更改但未更新”

    已更改但未更新 是什么意思 这些文件位于 git 中 它们已被修改 但是当我运行 git status 时 这些更改显示在 已更改但未更新 而不是 要提交的更改 下 On branch master Changes to be commit
  • 如何从暂存区删除单个文件(撤消 git add)?

    情况 我有一个 Git 存储库 其中文件已在索引中 我对几个文件进行了更改 打开 Git 并使用 git add 将这些文件添加到我的暂存区域 问题 如何从暂存区域中删除这些文件之一 但不将其从索引中删除或撤消对文件本身的更改 如果我正确理
  • “警告:'github.com' 的 ECDSA 主机密钥与 IP 地址的密钥不同”问题

    我不知道发生了什么 但有一天 当我起床时git push我的改变是 Warning the ECDSA host key for github com differs from the key for the IP address 140
  • 无法访问 Github 403 错误:权限被拒绝

    我是 Git Github 的新手 所以请原谅我的困惑 问题是 我刚刚对本地存储库进行了更改 并且想推送到 Github 上的原点 特别是 gh pages 之前 我一直在使用另一个 Github 帐户 因此我更改了 user name 和
  • 如何仅隐藏一些未提交的更改?

    我正在对 Git 存储库进行重大更改 并意识到某些更改需要向后移植到错误修复分支 我不想签入我的所有更改master因为它们还没有经过充分的测试和准备 但我确实想提取其中一些更改并将它们提交到错误修复分支 然后按原样返回到 master 我
  • merge.zoo 删除时区

    的结果merge zoo与其输入的时区不同 考虑下面的例子 library zoo zoo a zoo data frame a 1 5 seq as POSIXct 2014 01 01 00 00 01 tz UTC as POSIXc
  • 使用“合并修订范围”从分支合并到主干

    我已经像这样在 Subversion TortoiseSVN 中合并了几次 方法一 1 我更改主干并提交 2 我在分支中进行其他更改并提交 3 在主干的工作副本中 我使用 TortoiseSVN 从分支合并 合并一系列修订 4 然后我提交主
  • 如何使用和理解wso2 git仓库?

    我刚刚开始对wso2感兴趣 我正在寻找移动设备管理解决方案 所以我测试了 wso2 EMM 但我发现了一些限制 我想知道是否可以自己实现 我的问题是我完全迷失在 wso2 git 存储库中 有没有我错过的指导书或逻辑 如果有人帮助我解决这个

随机推荐

  • 使用 Eclipse IDE 开发 HTML5 应用程序

    我正在寻找一个好的 IDE 来开发 HTML5 应用程序 我知道我可以使用 Eclipse 来做到这一点 我已经在我的开发中使用了它 目前我使用 Eclipse Helios Release 我应该下载 Eclipse Helios Ser
  • 替换txt文件中输入的文本函数值不起作用

    这是我的过期 txt file foo1 2020 03 01 13 33 foo2 2020 02 01 08 45 foo3 2020 01 01 11 30 我需要打开过期 txt文件并替换以下所有日期值 2020 03 01 13
  • GitHub 页面只显示 ReadMe 文件?

    我正在尝试将我的网页托管到 Github 页面中 但由于某种原因 它似乎只显示我的自述文件 GitHub 存储库 https github com InquisitiveDev2016 InquisitiveDev2016 github i
  • dplyr 过滤器无法与 lubridate 一起使用

    我很难理解为什么下面的代码会这样 基本上 过滤器似乎已应用 但在后续调用中无法工作 gt library dplyr gt library lubridate gt gt md1 lt data frame no 1 4 time c 12
  • 是否可以使用 getUserMedia 检测相机何时打开/准备就绪?

    我成功地将 webcam js 与 Angular 应用程序一起使用 以允许用户捕获自己的照片 但是 我遇到了一些用户上传空白 全白或全黑照片的问题 我怀疑某些相机的启动速度比其他相机慢 这使得用户可以在相机真正工作之前拍摄自己的空白照片
  • 如何使用c++在Windows中锁定文件?

    如何将 Windows 中的文件锁定为仅当前线程 同一进程中的其他线程和其他进程 可以访问 读 写 该文件 如果可能 请告诉我一些类似 fcntl 的解决方案 锁定具有其描述符的文件的解决方案 但无论如何 其他解决方案也是受欢迎的 在Win
  • Django 2.0 allauth Facebook 2018

    我使用 Django all auth 登录 Twitter 和 Google 现在 Facebook 出现问题 尝试了 localhost 127 0 0 1 etc 之间的每一个组合 也通过将我的主机更改为 local domain c
  • 将记录添加到 Firebase 数据库时发送电子邮件

    我想向签名用户发送一封电子邮件 其中包含用户添加到 Firebase 数据库的数据 我正在使用 AngularJS 用户界面 是否有 Firebase 模块会触发电子邮件 并将数据添加到签名用户中 谢谢 拉杰什 你应该调查一下Firebas
  • 为什么 Python 代码在函数中运行得更快?

    def main for i in xrange 10 8 pass main 这段代码在Python中运行 注 计时是用Linux中BASH中的time函数完成的 real 0m1 841s user 0m1 828s sys 0m0 0
  • CORS 策略已阻止从 '' from origin '' 获取数据:请求的资源上不存在 'Access-Control-Allow-Origin' 标头

    I have this api method get that is connected to a lambda function that does a simple select from a database if i test th
  • Android:从正在运行的服务获取变量

    我的活动启动了一个服务 当我关闭我的应用程序时 该服务将继续运行 好吧 没错 但是 当我在活动中再次打开应用程序时 我需要知道在我之前启动的正在运行的服务 类 上定义的公共变量的值 我怎样才能做到这一点 Thanks 如果您将 Activi
  • iOS 5 Segue 实现

    在两个视图控制器之间实现 segue 时 如何使用 segue 对象更改目标视图控制器的属性 文档说这可以在prepareForSegue sender 方法中完成 我尝试过但没有成功 我不知道你是否还需要这个答案 但这是一个如此孤独的帖子
  • Rails3 rspec 问题

    我正在尝试rails3 我在用铁路教程 http railstutorial org 探索有关 Rails3 的更多信息的网站 该教程非常适合入门 我对rails2 的经验很少 我的 rspec 存在问题 目前阻碍了我的进度 我看到教程推荐
  • 获取 chrome 下载文件夹

    Windows 7 中的默认下载文件夹是c 用户 用户名 下载对于 Chrome 但可以通过设置将默认下载文件夹设置为其他文件夹 我需要找出哪个文件夹是下载文件夹 所以如果我将下载文件夹设置为c dd 那么我需要找出具体的文件夹 有没有办法
  • 如何在 chrome 中检查系统时间格式 - 在 JavaScript 中是 12 小时还是 24 小时?

    date toLocaleTimeString不适用于 Chrome 并且始终以 12 小时格式返回时间 我需要根据系统的时间格式显示时间 简短的回答是No您无法在浏览器中获取默认时间格式 因为它依赖于系统和浏览器设置 而 JavaScri
  • 如何将 CoreML 模型转换为 TensorFlow 模型?

    我了解到可以将 TensorFlow 模型 pb 文件转换为 CoreML mlmodel 以在 iOS 平台上运行 但我有一些想要在张量流上运行的 mlmodel 文件 所以我想知道是否有任何方法可以将它们转换为 pb 文件或任何其他方式
  • LINQ to Entities 用于减去 2 个日期

    我正在尝试使用 LINQ 和实体框架确定两个日期之间的天数 它告诉我它无法识别 System TimeSpan 类上的 Subtract 这是 LINQ 查询的 where 部分 where DateTime Now Subtract vi
  • 比 windows.h 的 Beep() 更快的替代方案

    我正在做一个个人项目 我想用旧的业余无线电无线电传输一些数据 我的第一份申请草案是这样的 我用 4 个 信号 构造一个字节 5000hz表示 00 6khz 表示 01 7khz的意思是 10 8khz的意思是 11 9khz 意思和上一个
  • 如何禁用 NetBeans 8.1 中烦人的警告/提示

    我正在 NetBeans 中使用 Java 和 Jersey 我的所有端点都标有以下提示 将方法转换为异步 这个提示确实污染了我通常寻找代码更改 错误的右侧排水沟 首选项 gt 编辑器 gt 提示中没有任何内容似乎会影响此提示 Cheers
  • Git 与 --squash 合并,同时保留每次提交的日志

    初始场景 A master B C D development 合并后我想要什么 squash A E master development B C D 在树枝上master git log将会 commit E Squashed comm