【问题标题】:Git rebase - i squashing didn't remove commitGit rebase - 我挤压没有删除提交
【发布时间】:2018-03-22 11:06:06
【问题描述】:

我在 origin master 的头部之后有一个本地提交,并且想要合并最后两个提交。所以假设历史如下:

* e9199ba - (HEAD -> master)
|           test
* c4e3b53 - (origin/master, origin/HEAD)
|           Saturn ring angle change in X and Y

并且想要进行一次提交,而不是 e9199bac4e3b53。 我做了 git git rebase -i HEAD~2 并压制了第二次提交:

pick c4e3b53 Saturn ring angle change in X and Y
squash e9199ba test

因此,我有两个独立的提交 - 新压扁的一个和旧主人的一个:

* 216b314 - (HEAD -> master)
|           Suqashed commits
| * c4e3b53 - (origin/master, origin/HEAD)
|/            Saturn ring angle change in X and Y

这里有什么问题?难道是起源大师头的原因?在这种情况下如何组合它们?或者可能有一些历史显示问题?

【问题讨论】:

    标签: git github commit rebase squash


    【解决方案1】:

    正如你所说:

    ...我有两个独立的提交 - 新的压扁一个和旧主的一个

    这是您应该期待的,因为 git rebase 通过 复制 提交工作(可能在此过程中进行一些修改,例如压缩),然后让您的 Git 将您自己的分支名称指向新副本。

    但是origin/master 不是你自己的,重新定位的,分支。它是您的 remote-tracking 分支,它会记住某些 other Git 在该 other Git 的 master 中的内容。因此,您的 origin/master 继续记住其他 Git 拥有的内容,即在您制作稍微修改的副本之前的原始提交。

    另一个 Git 存储库本身——你称为 origin 的那个——有另一个提交。既然origin 有它,任何从origin 复制的人也有它。你必须说服 origin,以及任何从 origin 复制的人,切换到你闪亮的新提交。

    如果您可以控制origin,您可能会使用“强制推送”来用您闪亮的新提交覆盖它现在在其master 中的任何内容。 (origin 存储库也会有旧的提交,尽管可能非常短暂,直到它通过“垃圾收集”。)然后你还必须说服origin所有用户切换,同样,就像您所做的一样,就像您强迫origin 做的那样。究竟如何你能做到这一点取决于你自己。

    请注意,如果其他人也在向origin 推送,那么您的强制推送可能会清除他们添加的提交, 这取决于c4e3b53。在强推之前,您应该与其他人协调。 (如果没有其他人,那协调起来会容易得多。)

    【讨论】:

      猜你喜欢
      • 2022-07-03
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      • 2023-01-21
      • 2016-11-22
      • 2011-09-23
      • 2021-06-05
      • 2017-11-04
      相关资源
      最近更新 更多