如何轻松地将本地Git分支推送到具有不同名称的远程?

时间:2011-04-21 02:19:09

标签: git version-control git-push git-remote

我一直想知道是否有一种简单的方法来推送和拉出具有不同名称的远程分支的本地分支,而不必始终指定这两个名称。

例如:

$ git clone myrepo.git
$ git checkout -b newb
$ ...
$ git commit -m "Some change"
$ git push origin newb:remote_branch_name

现在如果有人更新了remote_branch_name,我可以:

$ git pull

一切都是合并/快进的。但是,如果我在本地" newb"中进行更改,我就无法:

$ git push

相反,我必须:

% git push origin newb:remote_branch_name

似乎有点傻。如果git-pull使用git-config branch.newb.merge来确定从哪里开始,为什么git-push无法使用类似的配置选项?有没有一个很好的捷径,或者我应该继续走很长的路?

5 个答案:

答案 0 :(得分:153)

当您执行初始推送时添加the -u parameter

git push -u origin my_branch:remote_branch

后续推送将转到您想要的位置。

编辑:

根据评论,这只会设置拉力。

git branch --set-upstream

应该这样做。

答案 1 :(得分:85)

不确定。只需将push.default设置为upstream即可将分支推送到其上游(这与pull将从branch.newb.merge定义的相同),而不是将分支推送到名称匹配(这是push.default的默认设置,matching)。

git config push.default upstream

请注意,在Git 1.7.4.2之前,这曾经被称为tracking而不是upstream,因此如果您使用的是旧版本的Git,请改用tracking。在Git 1.6.4中添加了push.default选项,因此,如果您使用的是旧版本,则根本不会有此选项,并且需要明确指定要推送的分支。

答案 2 :(得分:13)

Adam命令现已弃用。您可以使用:

git branch --set-upstream-to origin/my_remote_branch my_local_branch

my_local_branch的上游分支设置为origin/my_remote_branch

答案 3 :(得分:0)

这是对我有用的过程。

git push origin master

现在你的新回购将是'原产地'而原始回购是'上游'。通过运行git remote -v确认它。 (附注:上游用于从原始仓库获取 - 以使您的本地副本与您想要贡献的项目保持同步 - 并且原点用于拉动和推送,因为您可以为自己的仓库做出贡献)。

git rebase upstream/branch-name git push origin master

现在,您的新远程回购主服务器(在Github上)将与原始主服务器同步,但它不会拥有任何功能分支。

git remote rm upstream
git remote add upstream new-repo-url

Rebase是一个聪明的合并。然后再次推送到主设备,您将在新仓库中看到所选功能分支为主设备。

可选:

$Threshold = 200 * 1024 * 1024;     # Bytes (209,715,200 bytes = 0.195GB)
$ServiceName = my service name;

Get-WmiObject -ComputerName "localhost" -Class Win32_PerfFormattedData_PerfProc_Process | where { $_.Name -like "httpd*" } | foreach {
    $procobj = $_;

    if($procobj.workingset -gt $Threshold)
    {  
        stop-Service $ServiceName;

        start-Service $ServiceName;

        $stamp = Get-Date
        echo $($stamp + " Started service: " + $ServiceName);
        #sleep 5;  //Do I need this and if so, where should it be placed?
    }
}

答案 4 :(得分:0)

我已经有一段时间在遇到相同的问题了。我终于有了一组语句,因此不必每次都做... <dependencies> ... <dependency> <groupId>com.github.scribejava</groupId> <artifactId>scribejava-apis</artifactId> <version>6.9.0</version> </dependency> </dependencies> 。我遵循了这些:

git push origin local:remote

在将上游设置为具有不同名称的远程分支(第一行),然后将该上游设置为默认名称(第二行)之后,第三行现在将遵循这些规则并推送到设置的上游。