如何将 Git 配置为在使用"git pull"时自动从当前分支拉取?

  • 本文关键字:分支 git 配置 Git pull git branch config
  • 更新时间 :
  • 英文 :


使用我们当前的设置,您在执行拉取时始终必须输入分支名称(即:git pull origin feature-branch"。我已经犯了一个错误,从一个分支拉到另一个分支,不小心将两个分支合并到两个非常不同的版本。我想通过配置 Git 来避免这种情况,以便只需键入 git pull 即可拉取您所在的当前分支。

我该怎么做?

也是打字git pull并获得所有魔力的粉丝。

您有 2 个选项:

1( git config --global branch.autoSetupMerge always

这将确保无论您是签出远程分支还是创建新分支;跟踪信息将由 git 自动处理。然后你就可以

git clone <some_repo>
git checkout -b <new_branch>
git push
git pull

请注意,为了在没有更多关键字的情况下push,您还需要设置推送选项。我已将其设置为 matching ,但每个人都有自己的偏好。( git config --global push.default matching (

详细信息:autosetupmerge默认为 true 。设置为 true 时,这将允许 git 在远程签出现有分支时执行跟踪。例如,如果您执行git checkout <branch> ,git 将处理跟踪信息,以便您可以在该分支上执行git pull但是,它不会在使用该选项创建的分支上执行此操作-b。将autosetupmerge设置为 always可确保 git 始终处理跟踪信息。

2(签出新分支时,需要专门设置分支以从原点拉取(又名跟踪(

git checkout -b <branch> --track <remote>/<branch>

当分支是暂时的时,我发现这不太有用。如果您很少创建新分支,则应使用此方法。但是,如果您像我一样,只有分支是持久的,并且每个功能都有自己的全新分支,那么我发现选项 1 更有用。

请注意,您不需要将 git 配置--global 。您可以简单地在那里编写--local,并且该设置仅特定于该存储库。

这对我有用:

git branch --set-upstream-to=origin/branch_name branch_name

完成此操作后,我可以使用以下语法:

git checkout branch_name
git pull --rebase
git push

您可以创建跟踪分支。来自 Git Book (http://git-scm.com/book/en/Git-Branching-Remote-Branches(:

克隆存储库时,它通常会自动创建一个 master跟踪origin/master的分支。这就是为什么git pushgit pull开箱即用,没有其他参数。但是,你 如果您愿意,可以设置其他跟踪分支 - 不跟踪的分支 分支origin,并且不跟踪master分支。简单的 案例是你刚刚看到的例子,正在运行 git checkout -b [branch] [remotename]/[branch] .如果你有 Git 版本 1.6.2 或更高版本,您还可以使用 --track 速记:

$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "serverfix"

如果您已将git push配置为自动计算远程分支名称,则可以传递-u,它还会自动设置跟踪分支。

要将 git push 设置为使用具有相同名称的远程分支,请执行以下操作:

git config --global push.default current`

git help push -u选项的说明:

-u, --set-upstream
    For every branch that is up to date or successfully pushed, add
    upstream (tracking) reference, used by argument-less git-pull(1) and
    other commands. For more information, see branch.<name>.merge in
    git-config(1).

假设您当前的分支<branch_name>

$ git push -u
Branch <branch_name> set up to track remote branch <branch_name> from origin.
Everything up-to-date

我需要将我的存储库与主分支同步,所以我最终得到了一个简单的 bash 脚本,该脚本可以获取更改并变基为主分支:

function git_do_rebase_with_master (){
    current=$(pwd)
    echo "Syncing $1 ..."
    cd "$1"
    git fetch origin
    GIT_STASH_MESSAGE="Sync on $(date)"
    echo $GIT_STASH_MESSAGE
    git stash -m"${GIT_STASH_MESSAGE}"
    git rebase origin/master
    (git stash list | grep "${GIT_STASH_MESSAGE}" && git stash pop) || echo "Stash was not applied"
    echo "Completed git sync current branch"
    git log --name-status HEAD^..HEAD --pretty=oneline -1
    echo "Completed syncing of $1 ..."
    cd $current
}

alias sync_repo="git_do_rebase_with_master /path/to/repo" 

我也是减少人为错误的简短命令的易用性的粉丝,遗憾的是没有可配置的默认 git pull 选项。不幸的是,顶部答案似乎不适用于现有的签出分支(如果您在拉出一堆存储库后才搜索此答案,则会很痛苦(,迫使您在每个存储库上运行git branch --set-upstream-to=origin/<branch> <branch>,用于每个现有分支。

为了减少键入的字符数,您可以使用 git 别名来实现对所有分支的速记拉取,您希望在遥控器上使用类似的命名分支。下面是为git pu创建别名的示例:

git config --global alias.pu '!git pull $(git remote) $(git branch --show-current)'

现在每次你键入git pu,它都会自动展开为完整的拉动命令。

shell 扩展非常强大,如果您更喜欢使用 git pull ,您也可以创建一个别名来快速更新远程分支跟踪,例如git up

git config --global alias.up '!git branch --set-upstream-to=$(git remote)/$(git branch --show-current) $(git branch --show-current)'

此外,如果您要进入.gitconfig文件并进行一点更改,则可以将其设置为自动假定您要从任何项目中的当前分支推送/拉取。因此,请在您想要的任何编辑器中打开.gitconfig。并找到 [push] 选项,将其设置为 default=simple ,如下所示。

[push]
        default = simple
[pull]
        default = simple

诸如此类。将拉动也更改为简单。两者现在可能都设置为当前。从本质上讲,它与我之前发布的选项完全相同:

git config --global pull.default current

但我发现这是一个更好的选择。因此,您可以使用同一行,但current更改为 simple

此命令应将 git 配置为拉取到当前分支。在终端/iTerm中运行时。

git config --global push.default current
我认为您可以将"推">

更改为"拉"以获得与"推"相同的效果。

最新更新