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

3z6pesqy  于 2022-11-20  发布在  Git
关注(0)|答案(8)|浏览(292)

使用我们当前的设置,您必须始终输入分支名称(即:git pull origin feature-branch“。我已经犯了从一个分支拉到另一个分支的错误,不小心合并了两个版本完全不同的分支。我想通过配置Git来避免这种情况,这样只要输入git pull就可以拉到当前分支。
我该怎么做?

oxf4rvwz

oxf4rvwz1#

我也是一个只输入git pull并获得所有魔力的粉丝。
您有两个选项:

1)git config --global branch.autoSetupMerge always

这将确保无论您 checkout 一个远程分支,还是创建一个新分支;跟踪信息将由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会在您 checkout 远程已有分支时执行跟踪。例如,如果您执行git checkout <branch>,git会处理跟踪信息,以便您可以在该分支上执行git pull。* 然而,* 它不会在您使用-b选项创建的分支上执行此操作。将autosetupmerge设置为always可确保git始终处理跟踪信息。
    **2)**检出新分支时,您需要专门设置要从原点提取的分支(也称为跟踪)
git checkout -b <branch> --track <remote>/<branch>

我发现当分支是暂时性的时,这个选项就不那么有用了。如果你很少创建新分支,你应该使用这个选项。但是,如果你像我一样,只有 master 分支是持久的,每个特性都有自己的全新分支,那么我发现选项1更有用。
注意,你不需要把git的配置设为--global,你可以直接在这里写上--local,并把这个设置只针对那个仓库。

2w2cym1i

2w2cym1i2#

这对我很有效:

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

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

git checkout branch_name
git pull --rebase
git push
2ic8powd

2ic8powd3#

您可以创建跟踪分支。从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"
0dxa2lsx

0dxa2lsx4#

如果将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
egmofgnx

egmofgnx5#

我需要将我的repos与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"
ijxebb2r

ijxebb2r6#

我也很喜欢使用简单的短命令来减少人为错误,遗憾的是git pull没有一个可配置的默认选项。不幸的是,最上面的答案似乎不适用于现有的 checkout 分支(如果你在拉取一堆repo后才搜索这个答案,这会很痛苦),迫使你对每个repo,对每个现有分支运行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时,它都会自动展开为full pull命令。
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)'
fafcakar

fafcakar7#

同样,如果你要进入你的.gitconfig文件并做一个小的修改,你可以设置它自动假设你想从任何项目的当前分支推/拉。所以在你想要的任何编辑器中打开.gitconfig。找到[push]选项,设置它为default=simple,就像下面一样。

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

就像这样。把pull也改为simple。现在可能两者都设置为current。本质上它和我之前发布的选项完全一样:

git config --global pull.default current

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

anhgbhbe

anhgbhbe8#

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

git config --global pull.default current

只需将“pull”改为“push”,就能获得与“git push”相同的效果。

相关问题