使用git从分支机构“导入”更改为重新分支的分支

时间:2013-04-04 17:27:57

标签: git branch rebase

我一直在开发一个项目 foo ,它是另一个项目 bar 的分支,正在进行分支等等。我现在也想对原始项目进行修改。

首先,我为未来的基础设置了一些东西:

git remote add bar git://bar/bar.git
git fetch bar
git checkout -b bar-master bar/master

现在,对于为项目 foo 创建的给定分支foo-branch,我已经运行了:

git checkout foo-branch
git checkout -b bar-branch
git checkout bar-branch
git rebase bar-master

我可以看到:

git log --format=one

这个篮板没问题了。

现在我要在foo-branch或bar-branch中进行更改/提交。

我的问题是:如何将提交从一个分支(例如foo-branch)“导入”到另一个项目的分支(在给定的例子中,bar-branch)?

2 个答案:

答案 0 :(得分:0)

rebase之后你可以简单地合并数据,这将是fast-forward merge所以它不会引入任何合并提交。

或..如果你想要单一提交,你可以使用cherry-pick git命令 或..如果您希望一次导入多次提交,可以rebase使用--onto切换。

答案 1 :(得分:0)

所以,既然你已经使用上游(原始)回购重新设置了你的分支,那么你的所有设置都是为了快速合并 - 这是一个很好的开始。

要推送到不同的仓库,您只需在push命令中指定给定的仓库。要推送到foo,你会跑...

git push foo <branch-name>

要灌输到bar回购,请运行...

git push bar <branch-name>

从foo或bar中拉出它的同一组命令,但是使用pull而不是push。

有用的理解是因为git已经将foo和bar视为单独的遥控器,所以你不需要为每个repo创建一个特殊的分支。 Git已经在幕后为你做了这件事。使用相同的<branch>运行以下命令集以查看我的意思

git log foo/<branch>
git log bar/<branch>

当您运行git pull命令时,这是git fetch <remote>git merge <branch>的快捷方式。当您运行fetch命令时,git会创建/更新本地存储库上的所有分支存储库 - 所有命名约定为<remote-name>/<branch-name。这些不是您可以直接签出的分支,但您可以针对它们运行日志,从中进行合并,然后从它们进行重新绑定。