Git 如何将远程分支的提交写入本地分支?

Git 如何将远程分支的提交写入本地分支?,git,Git,我有一个远程分支,我们称之为原始的FIN-985。我有一个本地分支机构,名为FIN-985_v2FIN-985_v2是master的一个分支 我做了两个命令,我很困惑,因为其中一个命令显然给了我想要的 第一个是下面的那个 git rebase --onto FIN-985_the_original FIN-985_v2 这一次将FIN-985__原始的内容放入FIN-985_v2,问题是似乎将FIN-985_原始的内容替换为FIN-985_v2,删除了对FIN-985_v2的提交 第二部分似乎

我有一个远程分支,我们称之为原始的FIN-985。我有一个本地分支机构,名为
FIN-985_v2
<代码>FIN-985_v2是master的一个分支

我做了两个命令,我很困惑,因为其中一个命令显然给了我想要的

第一个是下面的那个

git rebase --onto FIN-985_the_original FIN-985_v2
这一次将
FIN-985__原始
的内容放入
FIN-985_v2
,问题是似乎将
FIN-985_原始
的内容替换为
FIN-985_v2
,删除了对
FIN-985_v2
的提交

第二部分似乎给了我想要的,但它有点违背我的逻辑

git checkout FIN-985_the_original
git rebase FIN-985_v2
我原以为重新基准将在FIN-985_v2上完成,而不是在原始的FIN-985_上完成。从我的命令中,我知道这是有道理的,因为签出是在
FIN-985__原始
上完成的,但正如我所读到的,它会破坏我的逻辑

欢迎给我任何建议

干杯

基本再基础(您的第二个案例)

我将从你的第二个案例开始,因为这是最容易解释的一个

git checkout A
git rebase B
要求Git接受A中不在B中的任何提交,并将其移动到B的末尾

示例场景:

-- 0 (master)
    \
     1 -- 2 -- 3 (B)
      \
       4 -- 5 (A)
     6 (C)
    /
-- 0 (master)
    \
     1 -- 2 -- 3 (B)
      \
       4 -- 5 (A)
如果在签出A时,我确实执行了git rebase B,我将提交4和5(它们在A上,但不在B上),并将它们移动到B的末尾:

-- 0 (master)
    \
     1 -- 2 -- 3 (B)
                \
                 4' -- 5' (A)
现在A将有B的所有提交,后面是A的提交

在您的情况下,
原始
的提交现在应该在
v2
的提交之后,并且
原始
应该是
v2
的一个分支,尽管我不确定您所说的是什么

使用--on

当你使用
--on
时,事情会变得很奇怪。我将再次从
签出开始,因为当前签出的分支仍然是正在移动的分支:

git checkout A
git rebase --onto C B
要求Git将A上但不在B上的提交移动到
——上。但是现在,我们给了这个重基一个目的地:把它们放在C的末尾

让我们将C添加到我的初始场景中:

-- 0 (master)
    \
     1 -- 2 -- 3 (B)
      \
       4 -- 5 (A)
     6 (C)
    /
-- 0 (master)
    \
     1 -- 2 -- 3 (B)
      \
       4 -- 5 (A)
既然我在A上,我们还是要移动4和5:他们在A上,但不是在B上;但我们会把它们放在C上,即6点之后:

       6 (C)
      / \
     /   4' -- 5' (A)
    /
-- 0 (master)
    \
     1 -- 2 -- 3 (B)
因此,在您的情况下,应该发生什么取决于在重新基础之前签出了什么:签出的分支中不在
v2
中的提交应该被移动到原始
的末尾

我发现我很少想要
--on
,坦率地说,我发现这很令人困惑,我可能会随意选择提交,而不是使用
git-rebase--on

迂腐的音符

按照上的约定,我使用“标记移动的提交,因为4”和“5”是新的提交,复制4和5,而不是4和5本身

当我说“移动”时,我是在走一条语言上的捷径:提交在技术上不是移动的,而是重新应用的,因此创建的新提交看起来或多或少与原始提交相同。

基本重基(您的第二种情况)

我将从你的第二个案例开始,因为这是最容易解释的一个

git checkout A
git rebase B
要求Git接受A中不在B中的任何提交,并将其移动到B的末尾

示例场景:

-- 0 (master)
    \
     1 -- 2 -- 3 (B)
      \
       4 -- 5 (A)
     6 (C)
    /
-- 0 (master)
    \
     1 -- 2 -- 3 (B)
      \
       4 -- 5 (A)
如果在签出A时,我确实执行了git rebase B
,我将提交4和5(它们在A上,但不在B上),并将它们移动到B的末尾:

-- 0 (master)
    \
     1 -- 2 -- 3 (B)
                \
                 4' -- 5' (A)
现在A将有B的所有提交,后面是A的提交

在您的情况下,
原始
的提交现在应该在
v2
的提交之后,并且
原始
应该是
v2
的一个分支,尽管我不确定您所说的是什么

使用--on

当你使用
--on
时,事情会变得很奇怪。我将再次从
签出开始,因为当前签出的分支仍然是正在移动的分支:

git checkout A
git rebase --onto C B
要求Git将A上但不在B上的提交移动到
——上。但是现在,我们给了这个重基一个目的地:把它们放在C的末尾

让我们将C添加到我的初始场景中:

-- 0 (master)
    \
     1 -- 2 -- 3 (B)
      \
       4 -- 5 (A)
     6 (C)
    /
-- 0 (master)
    \
     1 -- 2 -- 3 (B)
      \
       4 -- 5 (A)
既然我在A上,我们还是要移动4和5:他们在A上,但不是在B上;但我们会把它们放在C上,即6点之后:

       6 (C)
      / \
     /   4' -- 5' (A)
    /
-- 0 (master)
    \
     1 -- 2 -- 3 (B)
因此,在您的情况下,应该发生什么取决于在重新基础之前签出了什么:签出的分支中不在
v2
中的提交应该被移动到原始
的末尾

我发现我很少想要
--on
,坦率地说,我发现这很令人困惑,我可能会随意选择提交,而不是使用
git-rebase--on

迂腐的音符

按照上的约定,我使用“标记移动的提交,因为4”和“5”是新的提交,复制4和5,而不是4和5本身


当我说“移动”时,我采用了一种语言上的快捷方式:从技术上讲,提交不会移动,而是重新应用,从而创建与原始提交大致相同的新提交。

旁注:假设的分支名称中有一个空格。这作为一个分支名称是无效的,但也会造成混淆,因为在命令行中,空格分隔了不同的参数。称之为“原始”
或“原始”或干脆去掉“原始”这个词来消除这个特殊的问题……您好,开始吧。谢谢。旁注:假设分支名称中有一个空格。这作为一个分支名称是无效的,但也会造成混淆,因为在命令行中,空格分隔了不同的参数。称之为“原始”或“原始”或干脆去掉“原始”这个词来消除这个特殊的问题……您好,开始吧。谢谢