1

假设我在本地分支 A 上有以下提交,然后我将其推送到远程分支。

commit 1
commit 2
commit 3
commit 4

现在,我从远程主机拉出,提交历史看起来像这样 -

//From branch A
commit 1
commit 2
commit 3
commit 4
//From master
commit 5
commit 6

如果我现在想使用 git rebase -i 和 git push -f 压缩提交 2 和 3,那是否也会重写提交 5 和 6?如果是,有没有一种方法可以在不重写我从主分支中提取的提交的情况下压缩我之前的提交?我是 Git 新手,所以如果我遗漏了一些非常基本的东西,请见谅。

4

2 回答 2

2

如果您在功能分支中并重新定位到 master 上,则 Rebase 不会重写这些提交。如果你的变基范围碰巧超过了提交 5 和 6,那么它们会被复制和修改,但你不会丢失任何东西。这是一个正常的操作,git 不会就地更改提交,新的提交是通过任何需要的更改创建的。在您的功能分支内运行git rebase -i master将复制您的功能分支的唯一提交,然后将它们重新应用到您的分支的更新版本。

假设提交 6 是您的 HEAD,提交 5 和 6 基本上被删除并在更新分支的基础时重新出现在提交 1 之前。然后根据您的指示重播提交 1-4。

但是,如果提交 1 是您的 HEAD,git rebase -i master则将撤消提交 1-4,并使用您的 squash 指令重播它们,从而产生新的历史记录:6 <- 5 <- 4 <- 1',其中提交 2 和 3被压扁,而 5 和 6 不受影响。

可以在此处找到有关变基的更多详细信息和更好的解释。

于 2017-11-18T09:37:25.167 回答
0

如果您按照您的建议进行操作,那么提交的内容保持不变(如果没有变基冲突),但是它们的哈希值会有所不同,因为它们的父母会改变。因此,它不再是提交,而是具有相同内容的不同提交。强制推送是可以的,当您确定没有其他人在使用该远程分支时,否则您重写他/她已经从. 我个人不会在.5656remoteremote/master

于 2017-11-18T09:55:48.710 回答