我已经看到你可以添加一个遥控器并声明它是另一个遥控器。
例如,如果我将原点设为
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
当分支名称不同时,有没有办法从一个分支中的分支拉出并推送到另一个分支中的另一个分支?
答案 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
可能会失败。