- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我经常发现自己想要从我的本地存储库中压缩两个或多个提交。我这样做的策略是从软重置开始,然后提交所有重置的更改。
对于软重置,我使用以下命令:
git reset --soft HEAD~n
其中 n 是我要重置的提交数。如果我没有将 merge 提交包括在我想要重置的提交数量中,这就可以正常工作——例如,如果我在我当前的分支上提交了四次并且想要软重置 HEAD~4。
但是,假设在我的 4 次提交之后,我将另一个分支 merge 到我当前的分支上。 Git 隐式提交 merge 更改,并在我执行 git 日志时显示。现在,如果我想软重置回 HEAD~5(4 次提交 + merge 提交),除了我打算重置的 4 次提交之外,git 将忽略 merge 提交并重置下一个最新的非 merge 提交.本质上,我应该重置回 HEAD~4 - git 在重置时似乎忽略了 merge 提交。
为什么 Git 会这样?我如何将这些 merge 提交包含在软重置中?
(举个例子:我按时间顺序提交了 A-B-C-D-E-F,F 是 merge 提交。git reset --soft HEAD~4 会将分支重置为 A:提交 BCDE 已重置,提交 F 不包含在 4.)
最佳答案
嗯,这不是因为 git 忽略了 merge 提交。这是因为 ~
和 ^
在 Git 中是如何工作的。
~n
表示通过第一个父级在层次结构中上升 n 级
。如果将其指定为 ^n
,则表示转到 n th
父级,从左边开始。
如果我们在您的 git 存储库(您给出的示例)中运行 git log --graph --pretty=oneline
,我们可能会得到如下内容:
* da497fa213169e75b9cec382e28561d5e56f6daf (HEAD -> master) f (merge)
|\
| * aaa519bce409d0fb5e187dff6ed82d73d7cd437b (Dev) e
|/
* f537237e48fc7218af288ddc91a02c1e24ea1887 d
* 2c41ee71ee7b9b450cd10eab685e0007fe92b688 c
* 411c96c85a2e34bf798cab5c0e6f4532a5ebfe35 b
* c9d38077a5704df382b0fd0d83d4fcdf7c408f23 a
请注意提交 f
有两个父项(由于 merge 提交)。现在当你说 HEAD~4 时,它会在 HEAD 之后的层次结构中从左开始寻找 4 个提交,即 b
。 (它不会占用 e
,因为它在 f
的 second parent
中。)
您可以使用 git rev-parse
命令来解析并获取特定的提交 ID。
例如:如果您运行 git rev-parse HEAD~4
,您将看到它返回 a
的提交 ID。
在我看来,您不必担心这一点,因为最终,git 会将您的分支重置为给定的提交 ID。但是如果你想重置你的分支以提交 e
,现在你需要告诉它访问它的正确方法。
所以你可以告诉它,选择 HEAD 的第二个父级,然后重置为那个。
那等于:HEAD^2
你也可以将它扩展到 a
到 e
,如果你给出你的重置命令:
git reset --soft HEAD^2~3
。
但我认为,您的情况不需要这样做。
这是对上述内容的一个很好的表示,取自 git rev-parse
文档。
G H I J
\ / \ /
D E F
\ | / \
\ | / |
\|/ |
B C
\ /
\ /
A
A = = A^0
B = A^ = A^1 = A~1
C = A^2 = A^2
D = A^^ = A^1^1 = A~2
E = B^2 = A^^2
F = B^3 = A^^3
G = A^^^ = A^1^1^1 = A~3
H = D^2 = B^^2 = A^^^2 = A~2^2
I = F^ = B^3^ = A^^3^
J = F^2 = B^3^2 = A^^3^2
https://git-scm.com/docs/git-rev-parse/1.8.0#_specifying_revisions
希望对您有所帮助:)
关于git - 在进行软重置时如何告诉 git 包含我的 merge 提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51591873/
我正试图找到一个基准来衡量用户愿意等待远程服务响应的时间。在我的例子中,响应是非常有用的,但不是对数据输入的业务关键验证。我想 HCI 领域一定已经在这方面做了一些工作。 如果您知道软实时响应的普遍接
这个问题在这里已经有了答案: What's the difference between SoftReference and WeakReference in Java? (12 个回答) 关闭6年前
社区维基 我不在乎声誉点,我只想要好的答案。请随意将此问题标记为社区 wiki。 上下文 我一直在研究《理性策划者》,并发现了以下观察结果: 逻辑编程非常有趣。 逻辑编程有时是违反直觉的 逻辑编程通常
我已阅读this article关于Java中不同类型的引用(强引用、软引用、弱引用、幻像引用),但我不太理解。 这些引用类型之间有什么区别?每种类型何时使用? 最佳答案 Java 提供了两种不同类型
我需要一个带有弱键或软键的并发 HashMap ,其中等式是 equals 而不是 ==。 对于此类键,Google Collection 默认选择 ==。 有没有办法覆盖这个选择?我应该如何进行?
我读了here使用下面的命令我们可以在 Linux 系统上模拟硬重启: echo 1 > /proc/sys/kernel/sysrq echo b > /proc/sysrq-trigger 但我想
我正在使用软件 I²C实现读取一组 Sensirion SHT21 传感器。我正在尝试找出一种让传感器回答以查看它们是否实际连接到设备的方法。我正在使用 Arduino,这意味着我所有的代码都是 C/
这个问题在这里已经有了答案: How do you determine using stat() whether a file is a symbolic link? (1 个回答) 关闭 9 年前
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我一直在使用 ICS 上的 Wifi Direct API,但有点卡住了。 在 API 中,有一个名为 createGroup 的方法可以在手机上创建一个基于遗留软件的接入点。这很棒并且有效,但我似乎
当我在 ruby 中有一个数组时,我可以在其上运行 delete_if block 。问题是它从我的数组中删除了元素。我想要相同的功能,只是不对原始数组进行更改,而是返回一个删除了对象的新数组。
在 Ubuntu Virtualbox 上运行从 Windows 移植的音频应用程序时,它报告以下内容: Devices found: OpenAL Soft OpenAL Soft 40964 in
下面是我的数据库结构的简化版本(在 MVC 2 中构建一个概念验证站点,使用 Entity Framework 4 作为我的 ORM): [Stores] StoreID (PK) StoreName
我用 ESP8266 创建了一个软 AP,我通过 android 6.0 marshmallow mobile 连接到它。连接后,如果我忽略它并打开浏览器窗口打开我的网络服务器页面或使用自定义构建的应
如何应用 Three.js online editor 中所示的 PCF (SOFT) 阴影类型以 JavaScript 代码的形式发送到你的渲染器? 最佳答案 要使用该类型的阴影,您需要使用相应类型
我知道 Wifi Direct 的工作原理是在其中一台设备中创建软 AP(软件接入点)。我也知道很多 Android 支持 Wifi Direct,但 iPhone 不支持。 我的问题是:是否可以创建
我有一个在 14.04.05 LTS 上运行的 Ubuntu 服务器。 此服务器上还安装了几个 ugins mongodb 应用程序。 MongoDB版本为3.4.2 我正在尝试增加 mongodb
我是一名优秀的程序员,十分优秀!