在这种情况下,git 如何知道在变基时只选择分支的尖端?
How does git know only choose the tip of a branch when rebasing in this scenario?
我从一段看起来像这样的历史开始:
O--O(A)
\
\--O(B)--O(C)
首先,我将分支 B
重新设置为 A
:
O--O(A)--O(B)
\
\--O--O(C)
然后我将 C
重新设置为 B
,这就是历史的样子:
O--O(A)--O(B)--O(C)
我原以为 C
和 C~1
会变基到 B
上,变基告诉我有冲突。但是,只有 C
的提示被重新设置为 B
.
Git 怎么只知道变基 C
的尖端? Git 是否知道变基的 B
是 C
的父级?
简而言之,你最后一个问题的答案是肯定的。 Git 跟踪更改。如果它在合并或变基中发现相同的更改,它不会 git 阻碍。
Git rebase 只是接受你想要 rebase 的提交(在你的情况下 C
和 C~
)并尝试将它们应用到新的基础上(在你的情况下 B
).应用 C~
Git 后,发现没有进行任何更改,因为提交已经作为新的 B
存在,因此丢弃该提交,因为它已经存在。如果您早些时候挑选了一些中间提交,然后将您挑选的分支重新设置为您挑选的分支,情况也是如此。
我从一段看起来像这样的历史开始:
O--O(A)
\
\--O(B)--O(C)
首先,我将分支 B
重新设置为 A
:
O--O(A)--O(B)
\
\--O--O(C)
然后我将 C
重新设置为 B
,这就是历史的样子:
O--O(A)--O(B)--O(C)
我原以为 C
和 C~1
会变基到 B
上,变基告诉我有冲突。但是,只有 C
的提示被重新设置为 B
.
Git 怎么只知道变基 C
的尖端? Git 是否知道变基的 B
是 C
的父级?
简而言之,你最后一个问题的答案是肯定的。 Git 跟踪更改。如果它在合并或变基中发现相同的更改,它不会 git 阻碍。
Git rebase 只是接受你想要 rebase 的提交(在你的情况下 C
和 C~
)并尝试将它们应用到新的基础上(在你的情况下 B
).应用 C~
Git 后,发现没有进行任何更改,因为提交已经作为新的 B
存在,因此丢弃该提交,因为它已经存在。如果您早些时候挑选了一些中间提交,然后将您挑选的分支重新设置为您挑选的分支,情况也是如此。