Git:如何从另一个存储库中提取而不添加合并提交

时间:2018-11-12 22:54:22

标签: git version-control git-merge git-pull git-fetch

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

A --- B --- C

今天,我继续将这个存储库克隆到我的一个沙箱中(我们称其为work_sb01)。我做了一些工作,并在本地提交了更改(可能只有一个提交或多个提交)。该沙箱的Git历史记录如下所示:

A --- B --- C --- X

从今天起两天,我将同一个存储库克隆到另一个沙箱中(我们称之为work_sb02)。正如预期的那样,仓库HEAD已移动,因此历史记录现在可能看起来像这样:

A --- B --- C --- D --- E

我需要能够提取在work_sb01中所做的更改并将其带入work_sb02。我目前正在使用以下命令进行此操作:

cd <path_to_work_sb02>
git pull <path_to_work_sb01> master

这可以完成工作,但是会创建合并提交。我现在有一个要求,避免将合并提交添加到项目Git日志中。如何从work_sb01中提取更改,并使它们成为历史记录中的最新提交?换句话说,work_sb02的本地历史记录应如下图所示:

A --- B --- C --- D --- E --- X

2 个答案:

答案 0 :(得分:1)

这是从work_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

答案 1 :(得分:0)

如果在path_to_work_sb02中进行的pull --rebase path_to_work_sb01没有给您正确的顺序,则可以...考虑相反的做法:

  • path_to_work_sb02路径中拉回path_to_work_sb01
  • path_to_work_sb01重命名为path_to_work_sb02
  • 更改其远程origin网址
  • 从那里继续工作。