GIT从remote1 / master获取本地分支,并推送到remote2 / legacy

时间:2017-08-02 12:56:29

标签: git github version-control

我已经看到你可以添加一个遥控器并声明它是另一个遥控器。

例如,如果我将原点设为

git remote add origin git@github.com:newrepo/newrepo.git

我可以添加一个新的遥控器并将其pushurl设置为我的原点:

git remote add oldremote git@github.com:oldrepo/oldrepo.git
git remote set-url --push oldremote git@github.com:newrepo/newrepo.git

因此,如果我从branch1

创建分支oldremote/branch1
git fetch oldremote branch1
git checkout -b branch1 oldremote/branch1

它会从oldremote/branch1拉出并推送到origin/branch1

这可以按预期工作。从git pull开始oldremote拉(并说我们是最新的)并推送到origin。很好,很容易。

现在我正在尝试创建一个与其远程分支名称不同的分支。确切地说,我希望将oldremote/master跟踪为本地分支legacy,并将此本地分支推送到origin/legacy

git fetch oldremote master
git checkout -b legacy oldremote/master

现在,这有两个副作用。

首先,git push不会推送到origin/legacy。我必须做git push origin legacy

其次,执行git pull不只是从oldremote/master获取和合并。它从oldremote获取每个分支。

TL / DR

当分支名称不同时,有没有办法从一个分支中的分支拉出并推送到另一个分支中的另一个分支?

1 个答案:

答案 0 :(得分:3)

git config branch.legacy.remote oldremote
git config branch.legacy.pushremote origin
git config branch.legacy.merge refs/heads/master

git config --local -e应如下所示:

[remote "oldremote"]
    url = git@github.com:oldrepo/oldrepo.git
    fetch = +refs/heads/*:refs/remotes/oldremote/*
[remote "origin"]
    url = git@github.com:newrepo/newrepo.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = oldremote
    merge = refs/heads/master
[branch "legacy"]
    remote = oldremote
    pushremote = origin
    merge = refs/heads/master

请注意,push.default的值应取消设置或simple。正如手册所说,simple已成为Git 2.0的默认设置。如果其值不是simple或未设置,则git push可能会失败。