Git Rebase:来自另一个分支的提交出现在我的分支中?
Git Rebase: commit from another branch showing up in my branch?
在 1-10 的范围内,我的 git 技能除了拉、提交、推动之外的任何事情都是 -5。
我在我的 b运行ch 上做了一个 git 变基来压缩我的合并,使用 git rebase --interactive [my first commit hash]
但是众所周知,这将打开编辑器,其中包含所有在 我的第一次提交后 提交。
我想将我的第二次提交压缩到我的第一次提交中,所以我明智地决定“嘿,让我使用相同的命令,但使用我在第一次提交的哈希之前看到的第一次提交哈希。”所以我做到了。
参考图
master ------- commitX --- my branch --- commit1 --- commit2 --- ... --- commitINF.
|__________another branch____commitA
我想将 commit2 压缩到 commit1 中。为此,我尝试了 运行 git rebase --interactive commitX
然后我将 commit2 压缩到 commit1,然后 运行 git push --force-with-lease
后来看了看我的b运行ch,commit2
被压成commit1
好了。但是现在我的 b运行ch 也在我的 b运行ch 的工作历史中显示了 another branch
中的 commitX
,以及它的所有变化。
在这种情况下我做错了什么?下次我应该如何压缩 b运行ch 中的前两个提交?
更重要的是,我如何从我的 b运行ch 的历史记录中删除 commitX WITHOUT 将它从 repo 的工作历史记录中删除,以便它仍然显示在它的b运行ch 它属于哪里?
你的图不是很好,但我想你想画的是这样的:
V -- W -- commitX (master)
| |
| commit1 -- commit2 -- commitN (mybranch)
|
commitA (anotherbranch)
正确的说法是,如果您希望将 commit2 和 commit1 压缩在一起,您必须请求一个以 commitX 开头的交互式变基。这将创建一个从 commit1 开始的 TODO 列表,您需要它来执行交互式变基。
考虑到我提出的图表,你的问题的其余部分是不连贯的。可能是我没猜对你想表达的意思。
但是您使用诸如“我的分支还显示...”之类的短语似乎暗示您认为“分支”是由许多提交组成的细长的东西。它不是。 Git 中的“分支”是 one 提交,也就是 all。 “历史”就是当您开始从每次提交向其父提交向后走时所得到的。
那一步 永远不会停止 — 直到您完成有史以来的第一次提交。例如,在我的图表中,正确 说 commitX 是 mybranch 历史的一部分——W 也是如此,V 也是如此。如果你可以步行到达提交向后,它是历史的一部分。
就我而言,事实证明这是人为错误造成的,一如既往。我从 repo 的提交日志中提取了我 运行 我的 rebase commitA
的提交,没有记住提交日志显示 all commits on 全部 b运行ches.
所以说真的,我并没有像我想的那样在 commitX 上变基,而是在 commitA 上变基。
虽然它最终确实像我想要的那样将我的提交 1 和 2 压缩在一起,但它也将我的 b运行ch 重新定位在 anotherbranch
之上,因此我在 myb[=27= 中看到了 commitA ]ch的历史。
解决方案是在 myb运行ch 上简单地 运行 另一个交互式变基,但是这次我必须确保我在最后一个 commitSha 上 运行ning 它commit ON MASTER(在这个例子中,commitX)。
在 1-10 的范围内,我的 git 技能除了拉、提交、推动之外的任何事情都是 -5。
我在我的 b运行ch 上做了一个 git 变基来压缩我的合并,使用 git rebase --interactive [my first commit hash]
但是众所周知,这将打开编辑器,其中包含所有在 我的第一次提交后 提交。
我想将我的第二次提交压缩到我的第一次提交中,所以我明智地决定“嘿,让我使用相同的命令,但使用我在第一次提交的哈希之前看到的第一次提交哈希。”所以我做到了。
参考图
master ------- commitX --- my branch --- commit1 --- commit2 --- ... --- commitINF.
|__________another branch____commitA
我想将 commit2 压缩到 commit1 中。为此,我尝试了 运行 git rebase --interactive commitX
然后我将 commit2 压缩到 commit1,然后 运行 git push --force-with-lease
后来看了看我的b运行ch,commit2
被压成commit1
好了。但是现在我的 b运行ch 也在我的 b运行ch 的工作历史中显示了 another branch
中的 commitX
,以及它的所有变化。
在这种情况下我做错了什么?下次我应该如何压缩 b运行ch 中的前两个提交?
更重要的是,我如何从我的 b运行ch 的历史记录中删除 commitX WITHOUT 将它从 repo 的工作历史记录中删除,以便它仍然显示在它的b运行ch 它属于哪里?
你的图不是很好,但我想你想画的是这样的:
V -- W -- commitX (master)
| |
| commit1 -- commit2 -- commitN (mybranch)
|
commitA (anotherbranch)
正确的说法是,如果您希望将 commit2 和 commit1 压缩在一起,您必须请求一个以 commitX 开头的交互式变基。这将创建一个从 commit1 开始的 TODO 列表,您需要它来执行交互式变基。
考虑到我提出的图表,你的问题的其余部分是不连贯的。可能是我没猜对你想表达的意思。
但是您使用诸如“我的分支还显示...”之类的短语似乎暗示您认为“分支”是由许多提交组成的细长的东西。它不是。 Git 中的“分支”是 one 提交,也就是 all。 “历史”就是当您开始从每次提交向其父提交向后走时所得到的。
那一步 永远不会停止 — 直到您完成有史以来的第一次提交。例如,在我的图表中,正确 说 commitX 是 mybranch 历史的一部分——W 也是如此,V 也是如此。如果你可以步行到达提交向后,它是历史的一部分。
就我而言,事实证明这是人为错误造成的,一如既往。我从 repo 的提交日志中提取了我 运行 我的 rebase commitA
的提交,没有记住提交日志显示 all commits on 全部 b运行ches.
所以说真的,我并没有像我想的那样在 commitX 上变基,而是在 commitA 上变基。
虽然它最终确实像我想要的那样将我的提交 1 和 2 压缩在一起,但它也将我的 b运行ch 重新定位在 anotherbranch
之上,因此我在 myb[=27= 中看到了 commitA ]ch的历史。
解决方案是在 myb运行ch 上简单地 运行 另一个交互式变基,但是这次我必须确保我在最后一个 commitSha 上 运行ning 它commit ON MASTER(在这个例子中,commitX)。