Git:如何在不添加合并提交的情况下从另一个存储库中提取

Git:如何在不添加合并提交的情况下从另一个存储库中提取,git,version-control,git-merge,git-pull,git-fetch,Git,Version Control,Git Merge,Git Pull,Git Fetch,这是一个多个开发人员正在工作的项目。假设所有工作都在主分支上完成,并且存在一个远程回购,该回购具有以下历史记录: A --- B --- C 今天,我将这个存储库克隆到我的一个沙盒中(我们称之为work\u sb01)。我做了一些工作,并在本地提交了我的更改(可能只有一个提交或多个提交)。此沙箱的Git历史记录如下所示: A --- B --- C --- X A --- B --- C --- D --- E --- X 两天后,我将同一个存储库克隆到另一个沙箱中(我们称之为work\u

这是一个多个开发人员正在工作的项目。假设所有工作都在主分支上完成,并且存在一个远程回购,该回购具有以下历史记录:

A --- B --- C
今天,我将这个存储库克隆到我的一个沙盒中(我们称之为
work\u sb01
)。我做了一些工作,并在本地提交了我的更改(可能只有一个提交或多个提交)。此沙箱的Git历史记录如下所示:

A --- B --- C --- X
A --- B --- C --- D --- E --- X
两天后,我将同一个存储库克隆到另一个沙箱中(我们称之为
work\u sb02
)。正如预期的那样,回购头已经移动,因此历史现在可能看起来像这样:

A --- B --- C --- D --- E
我需要能够将我在
work\u sb01
中所做的更改拉入
work\u sb02
。我目前正在使用以下命令执行此操作:

cd <path_to_work_sb02>
git pull <path_to_work_sb01> master

如果在
path_to_work_sb02
a
pull--rebase path_to_work_sb01
中执行操作没有给出正确的顺序,您可以。。。考虑做相反的事情:

  • pull--从
    path\u到\u work\u sb02
    path\u到\u work\u sb01path重新设置基址
  • path\u重命名为\u work\u sb01
    path\u重命名为\u work\u sb02
  • 更改其远程
    origin
    URL
  • 从那里继续工作

    • 以下是在工作中实现这一点的正确方法\u sb02:

      cd <path_to_work_sb02>
      git remote add sb01 <path_to_work_sb01> 
      git fetch sb01 
      git checkout master 
      git rebase --onto master master sb01/master
      
      cd
      git远程添加sb01
      git获取sb01
      git签出主机
      git rebase——在主控sb01/master上
      
      git pull
      是一个方便的命令,意思是“运行
      git fetch
      ,然后运行第二个命令,通常是
      git merge
      ”。如果您不想运行
      git merge
      ,请不要运行它。在我看来,最好不要在这里运行
      git merge
      也要避免
      git pull
      ,尽管您可以指示
      git pull
      使用
      git rebase
      作为第二个命令。请注意,rebase实际上不会将
      X
      本身放在
      E
      之后,而是将
      X
      (仍然在
      D
      之后)复制到
      E
      之后的新的(改进的?)提交
      X'
      。对,我还尝试了
      git pull--rebase master
      。然而,在这种情况下,本地历史变成了
      A--B--C--X--D--E
      。我希望有另一种方法可以做到这一点,这样我的历史记录就有了我所需要的顺序。如果您单独执行提取和重定基础步骤,您就有了更多的控制权,这样您就可以获得所需的顺序(最后使用
      X'
      )。您将
      git签出
      您想要丢弃旧
      X
      的分支,并将其替换为新的、改进的
      X'
      ,然后告诉git使用取回的
      origin/
      重新设置该分支的基础。当你使用
      git pull
      时,它会把所有的东西组合成一个方便的命令,唉,它不能做你想做的事情,所以不要把它们组合起来。不幸的是,我不能这样做。这是一个聪明的想法,但我需要能够从
      工作_sb02
      开始做任何事情,而不需要对
      工作_sb01
      @AndresM进行任何更改,只需复制工作_sb01,而保留原始工作。