--no-ff merge 如何打破平分和指责?

2023-12-11

了解 Git 工作流程文章说,

因此,您添加了一条新规则:“当您合并功能分支时,请使用 –no-ff 强制进行新的提交。”这样就完成了工作,然后你就可以移动了 在。

然后有一天,您在生产中发现了一个严重的错误,并且您需要 追踪它的推出时间。你跑平分但继续着陆 在检查点提交上。你放弃并手工调查。

您将错误缩小到单个文件。你跑去责怪看看怎么样 过去 48 小时内发生变化。你知道这是不可能的,但责备 报告该文件已经几周没有被触及了。事实证明责备 报告初始提交时的更改,而不是合并时的更改。 您的第一个检查点提交在几周前修改了此文件,但是 更改已合并到今天。

无用的创可贴、破损的平分线和责备之谜都是 您将螺丝刀用作锤子的症状。

git合并--no-ff是您显式阻止快进合并的情况。但是,如果一个提交不是另一个提交的直接祖先,则快进甚至不会发生。这是开发中罕见的场景。换句话说,大多数合并都是非快进类型的。那么如何通过--no-ff破坏的功能bisect and blame?


tl;dr

合并提交和--no-ff没有任何关系git bisect or git blame per se.

Mixing public and private历史使得理解不同提交引入的变化变得更加困难。当使用时,这变得非常明显git bisect and git blame用于调试。

合并提交和git bisect

正如@torek所说,通过传递强制创建合并提交--no-ff没有做任何事git bisect.

真正的问题来自于污染公共历史具有临时提交的存储库 – 有时称为检查站提交——程序员用来在本地跟踪自己的工作。

由于其临时性,这些提交往往是不一致的– 可能会在代码库中引入错误 – 并且文档记录不足。在调试会话中进行这样的提交git bisect这不是一次愉快的经历;该补丁可能难以解释,或者更糟糕的是,它可能会破坏工作树中的代码。

I think莱纳斯·托瓦尔兹说得最好:

我想要干净的历史,但这实际上意味着(a)干净和(b)历史。

关于“干净”的部分,他接着详细阐述:

保持你自己的历史可读。

有些人通过先在头脑中解决问题来做到这一点, 并且不犯错误。但这是非常罕见的,对于我们其他人来说, 我们在解决问题时使用“git rebase”等。

别暴露你的垃圾。

合并提交和git blame

到那个时刻git blame, 合并提交do, 实际上,影响您得到的结果.

git blame总是显示原作者给定的代码行;换句话说谁added到文件中。从 Git 的角度来看,合并提交并不add任何内容到文件,它只是表示存储库目录和文件的快照,这些快照是由两行或多行历史记录组合而成的。除非它是一个邪恶合并, 那是。

这意味着运行git blame合并文件上将显示每一行的原始作者,无论谁进行了合并提交。

这就是为什么合并提交会让跟踪变得更加困难who做了一个特定的改变并且when。但话说回来,你不应该合并private致力于public无论如何,分支,因为除了原作者之外,它们对其他任何人都没有意义。

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

--no-ff merge 如何打破平分和指责? 的相关文章

  • 推送时发生 Git 错误 - update_ref 失败

    当我尝试推送本地提交时遇到问题 这可能是在 Android Studio 崩溃时发生的 这是错误 update ref 引用 refs remotes origin master 失败 无法锁定 ref refs remotes origi
  • 分支明显不同,但提交历史是相同的

    git status告诉我我的分支和我在另一个存储库上开始的分支已经分歧 On branch master Your branch and origin master have diverged and have 13 and 13 dif
  • IntelliJ:查看本地和 git 提交/分支之间所有已更改文件的差异

    使用 IntelliJ 的 diff 查看器是检查代码的一种非常好的方法 因为您可以使用 IntelliJ 代码编辑器的所有功能 重构 完成等 在本地版本中进行更改 不幸的是 我还没有弄清楚当你在 IntelliJ 中进行代码审查时如何做最
  • 如何从 android.googlesource.com 或 github.com 下载单个目录?

    我想下载 https android googlesource com platform frameworks base git master tools aapt https android googlesource com platfo
  • Git:显示分支之间的差异,忽略合并的提交

    我的存储库历史记录看起来像这样 x y z branch a b c d e master 我想获得 branch 完整历史记录的单个差异 即 像 git diff 输出 我不想要像 git log p 产生的一大堆差异 而不包括任何从 m
  • 有没有办法让 git flow 显示它在幕后执行的命令?

    有什么方法可以让 git flow 提前告诉我当我执行 flow 命令时它将执行的确切 git 命令吗 或者告诉我它是东吗 我只能看到输出和摘要吗 你可以使用Git的GIT TRACE 环境变量 http git scm com docs
  • git reset 命令中的 ~1 是什么意思?

    git 重置 HEAD 1 我的印象是 1 的意思是 从 HEAD 开始 遵循 1 链接 并将 HEAD 标签设置为新的提交节点 我正期待着 git 重置 HEAD 2 跟随 2 个链接 然后设置 HEAD 标签 但是 如果我尝试它 我会收
  • Git:发送电子邮件而不提交

    我有一个项目 我做了更改 并想使用 git send email 功能将它们发送给另一个用户 我发现它可以通过发送补丁来工作 由git format patch每次提交 是否可以只发送diff的 我不想先提交 然后发送补丁 是否有gitfo
  • 第一次使用node.js - “ReferenceError:节点未定义”

    我刚刚安装了node js 我尝试编写应该检查版本的node v 但它不起作用 这是输出 gt node v ReferenceError node is not defined at repl 1 2 at REPLServer self
  • 致命:.git/info/refs 无效:这是一个 git 存储库吗?

    我有一个托管在 Assembla 上的 Git 存储库 我正在尝试执行以下操作 git push u origin master 我一遍又一遍地收到以下错误 fatal https url repo name git info refs n
  • 默认情况下 git merge -Xignore-space-change

    我该如何设置该选项ignore space change对于所有合并使用git config 我也许可以使用别名merge 但因为我希望该设置应用于git stash pop git stash apply git pull and git
  • Ansible bitbucket 克隆存储库配置 ssh 错误

    我之前发布过这个问题 但那里的答案不再有效 总之 当使用 Ansible 配置我的 vagrant box 时 在尝试使用 ssh 克隆我的 bitbucket 私有存储库时 我遇到了一个神秘的错误 该错误指出 权限被拒绝 公钥 然而 如果
  • 我可以直接从我的谷歌云端硬盘在线推送/拉取吗?

    有一些方法可以通过谷歌驱动器同步 Windows 应用程序将我的本地 git 存储库同步到我的谷歌驱动器 但我想知道我是否可以完全绕过它的需要 Fro eg git remote add origin https drive google
  • Git 提交失败:“请使用 -m 或 -F 选项提供消息。”

    当我键入 git commit 命令来提交文件时 我收到以下错误消息 Microsoft Visual Studio 微软 找不到命令 错误 核心编辑器 Microsoft Visual Studio 存在问题 请使用 m 或 F 选项提供
  • Git 2.2.x 无缘无故更新旧包文件的时间戳

    Git 2 2 0 和 2 2 1 似乎修改了旧的时间戳 git objects pack pack pack偶尔会无缘无故地文件 它只是改变时间戳 内容是相同的 调试这一点很困难 因为它似乎很少进行更改 我在 2 2 0 之前的任何 Gi
  • 自定义 SSH 端口上的 Git

    我的 VPS 提供商建议我将 SSH 端口保留为他们默认分配的自定义端口号 不是 22 问题是 虽然我知道我可以在创建远程配置时提供端口号 但在进行 Git 克隆时似乎无法提供相同的操作 我在用gitolite https wiki arc
  • 如何让 Aptana Studio 记住 git ssh 密码

    我找不到任何有关如何获得 Aptana Studio 的内置 git 支持来记住执行推 拉操作的 ssh 密码的指南 信息 有人有什么想法吗 Aptana Studio 实际上是内置的 GIT 程序 它将在 Windows 上的 C Use
  • git 排除与忽略

    I use Tower http www git tower com 用于在 Mac 中使用 Git Tower 中的设置具有创建 gitignore 的 忽略 部分 但它还有另一个名为 排除 的部分 似乎可以将排除与 git ls fil
  • git reflog 和 log 有什么区别?

    手册页说 log 显示提交日志 reflog 管理 reflog 信息 reflog 信息到底是什么 它有哪些日志没有的信息 日志看起来更详细 git log显示当前的 HEAD 及其祖先 也就是说 它打印提交 HEAD 指向的提交 然后打
  • 如何减少 Bitbucket 上的 git repo 大小?

    我的问题摘要 在我向两个现有文件添加了几百个字节后 我在 Bitbucket 上的一个私人存储库的大小突然增加了一倍多 该存储库现在超过 2GB 这导致 Bitbucket 将其置于只读模式 因为它处于只读模式 所以我无法推送会减少存储库大

随机推荐

  • 理论:Axios调用(专门针对VueJS)

    在组件上mount axios从后端获取信息 在生产站点上 用户在路线之间来回移动 当数据已经存在时 一次又一次地进行相同的调用是低效的 state 专业人士如何设计他们的 VueJS 应用程序 以免进行不必要的 Axios 调用 谢谢你
  • WhatsApp 中我的网站链接没有预览

    的预览我的网站的页面在 Facebook 和 LinkedIn 中显示 但当我将链接粘贴到 WhatsApp 中时没有显示预览 None
  • Gtk 更改应用程序的字体和字体颜色

    我有一个 Gtk 和 C 应用程序 其中我想将字体设置为某种 XYZ 字体类型并将字体颜色设置为蓝色 对于应用程序中的所有标签和文本 我怎样才能一次性完成此操作 我已经开发了所有使用 Glade RAD 工具进行屏幕显示 目前我正在通过为每
  • 运行时代码生成和编译

    假设我有这段代码 它使用一些输入 例如 URL 路径 来通过反射来确定要运行的方法 init map put users viewUser map put users userIndex later String methodName ma
  • 如何让所有浏览器都支持 ?还有其他选择吗?

    我正在使用 HTML5 元素输入属性 只有 Google Chrome 支持日期 时间属性 我试过现代化但我无法理解如何将其集成到我的网站上 如何编码 语法 包含是什么 有关如何在所有浏览器中使用日期 时间属性的任何代码片段 任何不支持输入
  • #define 内的 #ifdef

    我想写这样的东西 define COV ON x ifdef COVERAGE TOOL Pragma COVERAGE x endif 有什么方法可以定义COV ON像这样 我知道我上面所做的事情是错误的 因为我不能这样做 ifdef在
  • 如何为位掩码创建 48 位 uint

    我正在尝试创建一个 48 位整数值 我知道可以使用字符数组或结构 但我希望能够进行位掩码 操作 并且我不确定如何做到这一点 目前该程序使用16位uint 我需要将其更改为48 它是一个字节码解释器 我想将内存寻址扩展到4GB 我可以只使用
  • Highcharts和表格数据的导出

    我已经搜索了一下 但无法找到关于如何将数据表与高图一起导出的明确解决方案 一篇 stackoverflow 帖子指着这个资源 现在不可用 有人成功地做到了这一点吗 请参考这篇文章 高图表链接 另请参阅Fiddle for code
  • 在您的应用程序中显示 iPhone 应用程序设置

    iPhone 支持一种定义应用程序设置的方法 以便它会在 设置 应用程序中自动创建 UI 我还想允许用户在应用程序内编辑应用程序设置 但最好重用自动创建的相同 UI See 应用程序设置 有没有办法让您的应用程序使用与 设置 应用程序相同的
  • 使用 xslt 的 CSV 到 XML - 如何具有递增的列名称

    我有这个 xslt 将 csv 转换为 xml 工作正常 除了所有列的标签都相同 我需要它像这样增加
  • ListView 并从项目中的子视图传播单击事件

    我有一个带有自定义项目的 ListView 3 个 ImageView 和一个 TextView 我有电话要打给setItemsCanFocus true 这样我就可以使 ImageViews 可点击 我目前正在使用 SimpleAdapt
  • 使用 PHP 截断浮点数

    当一个浮点数需要截断为浮点后的某个数字时 事实证明这并不容易做到 例如 如果必须截断到点后的第二位数字 则数字应该是 45 8976 gt 45 89 0 0185 gt 0 01 点后第二位数字不按点后第三位数字四舍五入 功能类似于rou
  • 如何判断一种颜色是否接近另一种颜色

    我正在创建一种颜色工具 该工具应该告诉我颜色是否接近另一种颜色 例如 Color colors new colors Color FromArgb 0 0 255 Color FromArgb 0 109 251 colors 0 IS B
  • href 链接中的 laravel 方法?

    我想创建一个带有两个链接的下拉菜单 删除 和 编辑 链接 对于删除功能 我创建了一个表单 Former horizontal open gt method DELETE gt action action Test TestControlle
  • 转换unix时间戳php

    我有一个数据库来存储我的时间 我使用 PHP 插入它 date Y m d H i s 然后我使用这个函数将其转换为 PHP 中的 unix 时间戳 function convert datetime str list date time
  • 线程 - wait()

    The wait 对象上的方法只能在同步上下文中调用 即当前线程必须拥有对象上的锁才能调用wait 方法 现在如果线程 T1 拥有对象上的锁 obj 并调用其 wait 方法obj wait 其他线程如何获得该对象的锁定 obj 这样他们也
  • 为什么Eclipse将maven运行时依赖变成编译依赖?

    我有一个 Maven 项目导入到 Eclipse Oxygen 中 Eclipse 报告没有编译问题 Alt F5 当我从命令行运行 Maven 时 我得到 ERROR home dean src TAP3UIs TAP3Desktop s
  • 我尝试在不同线程上使用 OpenGL 和 Windows API

    所以基本上我正在使用窗口 API创建一个空窗口 然后我使用OpenGL从不同的线程绘制到该窗口 我设法做到了这一点仅用一根线程 但是获取和分派系统消息以使窗口可用会减慢我能够获得的帧速率 因此我试图在主线程中绘制时让另一个线程并行执行此操作
  • 加号解码为空格

    我从 ios 和 android 发送请求到一些 PHP 服务器 并且 GET 请求中的一些参数被错误解码 request http myserver com path email john doe GET email john doe i
  • --no-ff merge 如何打破平分和指责?

    了解 Git 工作流程文章说 因此 您添加了一条新规则 当您合并功能分支时 请使用 no ff 强制进行新的提交 这样就完成了工作 然后你就可以移动了 在 然后有一天 您在生产中发现了一个严重的错误 并且您需要 追踪它的推出时间 你跑平分但