是否可以创建跟踪不存在的远程的分支

时间:2011-04-06 08:34:18

标签: git scripting automation

我想以这样的方式检查分支,以便后续的git push能够以相同的名称将其正确地推送到原点。

当远程分支已经存在时,这很容易

git checkout -b branch origin/branch

但是,即使origin/branch还没有,我也愿意这样做。

4 个答案:

答案 0 :(得分:8)

只需创建一个本地分支

git checkout -b branch

远程存储库对您的本地分支一无所知,因此您必须第一次“手动”推送它

git push origin branch

现在,如果您希望本地存储库让它使用远程存储库跟踪您的本地分支

git branch --set-upstream branch origin/branch

答案 1 :(得分:4)

没有简单的方法,AFAIK。

这是我目前正在努力争取的。这是一个bash函数,它设置一个新的本地分支,以便来自该分支的git push推送到具有相同名称的新远程分支。

function featurebranch() {
  if [ "$@" != "" ]; then
    git branch "$@" origin/master
    git checkout "$@"
    git config branch."$@".remote origin
    git config branch."$@".merge refs/heads/"$@"
    git config branch."$@".rebase true
  fi
}

必须使用git config,因为使用git push -ugit branch --trackgit branch --set-upstream-to命令都涉及实际存在的远程分支。

如果任何git大师检查过它并指出任何问题,我会很感激。助教。 ; - )

答案 2 :(得分:0)

Git 1.7.0 +

首先,创建一个本地分支:

git checkout -b new-branch

此时远程存储库不知道本地分支,因此我们需要推送它并设置跟踪参考。

git push -u origin new-branch

Git< 1.7.0

创建一个本地分支:

git checkout -b new-branch

版本1.7.0之前的Git需要三个命令来推送分支并设置跟踪参考。

git push origin new-branch
git config branch.new-branch.remote origin
git config branch.new-branch.merge refs/heads/new-branch

使用别名(Git 1.7.0 +)

Bonus:创建一个本地分支,并使用此git别名在一个命令中推送跟踪的远程分支:

git config --global alias.cb $'!sh -c \'git checkout -b "$0" && git push -u origin "$0"\''

然后要创建一个新分支,您可以运行:

git cb new-branch

答案 3 :(得分:0)

试过并测试过。 git版本2.10.1(Apple Git-78)

id  name    actions
1   AAA     view edit delete 
2   BBB     view edit delete 
3   CCC     view edit delete 
4   DDD     view edit delete 

  <div class="box">
        <div class="box-content box-table">
            <div ui-grid="gridUsers" ui-grid-pagination>
            </div>
        </div>
  </div>

<style type="text/css">
    a[disabled="disabled"] {
        pointer-events: none;
    }
    span[disabled="disabled"] {
        color: #a8a8a8 !important
    }
</style>

  $scope.gridUsers = {
            paginationPageSizes: [15, 30, 45],
            paginationPageSize: 15,
            enableColumnMenus: false,
            data: $scope.users,
            filterOptions: $scope.filterOptions,
            columnDefs: [{ field: 'id', displayName: 'Id', width: '20%'},
                { field: 'name', displayName: 'Name', width: '25%', enableFiltering: true},
                { name: 'Actions', displayName: 'Actions', width: '55%', cellTemplate:
                '<div class="grid-action-cell action-btns">'+
                '<span class="btn-small"><span style="color:#214c77;">view</span> </a>' +
                '<a ng-disabled={{!row.entity.isEditable}} ng-click="grid.appScope.edit(row.entity.id)" class="btn-small btn-link"><span ng-disabled={{!row.entity.isEditable}} style="color:#80bb41;">edit</span> </a>' +
                '<a ng-disabled={{!row.entity.isEditable}} ng-click="grid.appScope.delete(row.entity.id)" class="btn-small btn-link"> <span ng-disabled={{!row.entity.isEditable}} style="color:#e15829;">delete</span> </a>' 
                '</div>'}
            ]
        };


 Service.GetAllUsers(function (response) {
            if (response.length != 0) {
                $scope.users = response;
                $scope.gridUsers.data = $scope.users;
            }
        }); 

N.B。 - 您当前在当地的早午餐,以及您尝试推送的远程不存在的分支,必须具有相同的名称