【问题标题】:Strange result of 'git reset --soft HEAD''git reset --soft HEAD' 的奇怪结果
【发布时间】:2021-10-22 03:12:18
【问题描述】:

我在尝试压缩一些远程提交时遇到了一个奇怪的问题。我对一个 GitLab .yml 文件(准确地说是 22 个)进行了一系列小改动,我想将它们压缩到一个提交中。

到目前为止,我尝试做的是使用命令“git reset --soft HEAD~22”,然后将压缩的提交作为一个提交提交,然后强制推送以远程压缩提交(如this answer)。我知道如果在 GitLab 的合并请求中使用自动 squash,首先为此使用一个单独的分支会更明智,也不会那么痛苦,但我对 Git 比较陌生,当然已经吸取了教训。

正在发生的事情是this。当我尝试做所有 22 个时,它会压扁最后的 44 个,当我做 2 时,它会压扁最后的 24 个。我尝试了一些其他数字,它似乎是随机的(11 让我得到 33 个压扁的提交,4 给我 25 个,等等.)。这里发生了什么?我没有对我的远程仓库造成任何损坏,因为我没有推送任何东西并且我已经做了很多本地备份,但我完全感到困惑。

【问题讨论】:

  • 我认为原因是因为您重置的 2 个提交之一是与“原始”远程同步对应的合并提交(即您执行了“git pull”)。这意味着通过您分支中的此提交,您将获得最新的“起源”。如果您重置,您将不再是最新的,因为您的远程分支的历史不再包含在您的本地分支中。

标签: git git-reset


【解决方案1】:

感谢 Philippe 的评论,我明白了。其中一个提交是由 23 个单独的提交(.yml 更改)组成的合并。在此合并提交之后有一个提交,因此执行 'git reset --soft HEAD~1' 只会压缩最近的一次提交,但执行 'git reset --soft HEAD~2' 会获取分支上的最新提交,加上构成合并提交的 23 个提交。

因此,总而言之,在您使用的任何 Git 平台上检查您的提交图表(或使用某种可视化工具)。它将有助于以更易于阅读的方式列出提交历史,并有助于解释您看到的任何奇怪行为。

【讨论】:

  • 好的。所以,公平地说,你应该更新我的评论?
  • @Philippe 哦,对不起!我该怎么做?
猜你喜欢
  • 2020-02-16
  • 2014-08-25
  • 2011-01-02
  • 2019-08-30
  • 2021-10-28
  • 2021-05-14
  • 2012-06-09
  • 1970-01-01
相关资源
最近更新 更多