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

问题描述 投票:0回答:8

使用我们当前的设置,您在拉动时始终必须输入分支名称(即:

git pull origin feature-branch
”。我已经犯了从一个分支拉入另一个分支的错误,不小心合并了两个具有两个非常不同版本的分支。我想通过配置 Git 来避免这种情况,这样只需输入
git pull
就会拉出你所在的当前分支。

我该怎么做?

git branch config
8个回答
43
投票

我也是一个只打字

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>

我发现当分支是瞬态的时候这不太有用。如果你很少创建新分支,你应该使用它。然而,如果你像我一样,只有 master 分支是持久的,并且每个功能都有自己全新的分支,那么我发现选项 1 更有用。

注意,你不需要做git配置

--global
。您可以简单地在那里写
--local
,并且仅针对该存储库设置特定的设置。


14
投票

这对我有用:

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

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

git checkout branch_name
git pull --rebase
git push

12
投票

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

当你克隆一个存储库时,它通常会自动创建一个

master
跟踪
origin/master
的分支。这就是为什么
git push
git pull
开箱即用,没有其他参数。然而,你 如果您愿意,可以设置其他跟踪分支——那些不跟踪的分支
origin
上的分支并且不跟踪
master
分支。简单的 case就是刚才看到的例子,运行
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"

9
投票

如果你有

git push
配置为自动计算远程分支名称,那么你可以通过
-u
它也会自动设置跟踪分支。

要设置 git push 以使用具有相同名称的远程分支:

git config --global push.default current`

-u
选项的解释
git help push

-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

0
投票

我需要将我的回购协议与 master 分支同步,所以我最终得到了一个简单的 bash 脚本,它获取更改并变基到 master 分支:

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" 

0
投票

我也很喜欢可以减少人为错误的简短命令,遗憾的是 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)'

-3
投票

此外,如果您要进入

.gitconfig
文件并进行一点更改,您可以将其设置为自动假设您要从任何项目的当前分支中推/拉。所以在你想要的任何编辑器中打开
.gitconfig
。然后找到【push】选项,设置为
default=simple
,如下图

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

那样。也将 pull 更改为 simple 。两者现在都可能设置为当前。本质上它与我之前发布的选项完全相同:

git config --global pull.default current

但我发现它是更好的选择。因此,您可以使用同一行,但将

current
更改为
simple
.


-12
投票

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

git config --global push.default current

我认为你可以将“推”改为“拉”以获得与“推”相同的效果。

© www.soinside.com 2019 - 2024. All rights reserved.