代码之家  ›  专栏  ›  技术社区  ›  Debajit

未指定分支的“git push”的默认行为

  •  1523
  • Debajit  · 技术社区  · 16 年前

    我使用以下命令推送到我的远程分支:

    git push origin sandbox
    

    如果我说

    git push origin
    

    这是否也会推送我的其他分支的更改,还是只更新我当前的分支?我有三个分支: master , production sandbox .

    git push

    git推送 命令是否准确更新?

    git push 
    git push origin
    

    origin

    我明白 git push [remote] [branch] 只会将该分支推送到远程。

    12 回复  |  直到 10 年前
        1
  •  1781
  •   hashemi    3 年前

    the git-config(1) documentation :

    push.default
    

    • nothing

    • matching :(Git 2.0之前的默认设置)推送所有匹配的分支

    • upstream :将当前分支推送到其上游分支( tracking

    • current :将当前分支推送到同名分支

    • simple :(Git 1.7.11中的新功能,Git 2.0后的默认设置)类似于upstream,但如果上游分支的名称与本地分支的名称不同,则拒绝推送

      这是最安全的选择,非常适合初学者。

    命令行示例:

    git config push.default
    

    git config push.default current
    
        2
  •  240
  •   Christoffer    12 年前

    您可以使用push.defaults为git设置默认行为

    git config push.default current
    

    或者,如果您有许多存储库,并且希望所有存储库都相同,那么

    git config --global push.default current
    

    在此设置中,默认情况下,您将

    • 无:不要推任何东西
    • 跟踪:将当前分支推送到它正在跟踪的任何分支

    UPDATE-执行此操作的新方法

    从Git 1.7.11开始,请执行以下操作:

    git config --global push.default simple
    

        3
  •  209
  •   davr    15 年前

    git push origin origin git push

    git push <remote> ,在哪里 <remote>

    git-push man page

        4
  •  28
  •   Mukesh Chapagain    10 年前

    以下是一个非常方便和有用的信息 : Git Push: Just the Tip

    git push最常见的用途是将本地更改推送到公共上游存储库。假设上游是一个名为“origin”的远程(如果您的存储库是克隆,则为默认远程名称),并且要更新到/来自的分支名为“master”(默认分支名称),则可以通过以下方式完成: git push origin master

    git push origin 将把所有本地分支的更改推送到源远程的匹配分支。

    git推送源主机 将把更改从本地主分支推送到远程主分支。

    git push origin master:staging 将把更改从本地主分支推送到远程暂存分支(如果存在)。

        5
  •  19
  •   VonC    13 年前

    (2012年3月)
    小心:默认” matching
    (有时在git1.7.10+之后)
    :

    请参阅“ Please discuss: what "git push" should do when you do not say what to push? "

    push.default=matching ), git push .

    将默认值更改为“” upstream ,即只推送当前分支,并将其推送到git pull将从中拉取的分支。
    current

    到目前为止讨论的内容可以在这条帖子中看到:

    http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

    之前的相关讨论包括:

        6
  •  19
  •   Community Mohan Dere    8 年前

    您可以使用命令推送当前分支

    git push origin HEAD
    

    (取自 here )

        7
  •  18
  •   Mat Schaffer    14 年前

    pub = "!f() { git push -u ${1:-origin} `git symbolic-ref HEAD`; }; f"
    

    git pub 或另一个回购 git pub repo-name 很好吃。

        8
  •  12
  •   kenorb    10 年前

    您可以在您的 .gitconfig 例如:

    [push]
      default = current
    

    git config --global --get push.default
    
        9
  •  9
  •   Cody Caughlan    16 年前

    适当地将其命名为“gpull”和“gpush”:

    在我的~/.bash_profile中

    get_git_branch() {
      echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
    }
    alias gpull='git pull origin `get_git_branch`'
    alias gpush='git push origin `get_git_branch`'
    

    因此,执行“gpush”或“gpull”将只推送我的“当前打开”分支。

        10
  •  3
  •   Mark Fisher    13 年前

    此脚本(称为 git-setpush remote.origin.push

    #!/bin/bash -eu
    
    CURRENT_BRANCH=$(git branch | grep '^\*' | cut -d" " -f2)
    NEW_PUSH_REF=HEAD:refs/for/$CURRENT_BRANCH
    
    echo "setting remote.origin.push to $NEW_PUSH_REF"
    git config remote.origin.push $NEW_PUSH_REF
    

    Gerrit ,它将目标设定为 refs/for/XXX 进入审查部门。它还假设origin是您的远程名称。

    在签出分支后调用它

    git checkout your-branch
    git setpush
    

    很明显,它也可以用于结账,但我喜欢脚本 do one thing and do it well

        11
  •  2
  •   MichaelMoser    10 年前

    function gpush()
    {
      if [[ "x$1" == "x-h" ]]; then
        cat <<EOF
    Usage: gpush
    git: for current branch: push changes to remote branch;
    EOF
      else
        set -x
        local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
        git push ${bname}
        set +x
      fi
    }
    
    function gpull()
    {
      if [[ "x$1" == "x-h" ]]; then
        cat <<EOF
    Usage: gpull
    git: for current branch: pull changes from
    EOF
      else
        set -x
        local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
        git pull ${bname}
        set +x
      fi
    }
    
        12
  •  2
  •   kobi.kadosh    3 年前

    新配置 git 2.37.0

    git config --global --add --bool push.autoSetupRemote true
    

    simple , upstream

    参考文献 answer tweet docs commit