47

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

我该怎么做呢?

4

7 回答 7

39

我也是一个喜欢打字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选项创建的分支上执行此操作。设置autosetupmergealways确保 git 始终处理跟踪信息。

2)签出新分支时,您需要专门设置分支以从原点拉取(也称为跟踪)

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

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

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

于 2016-12-26T07:05:32.823 回答
13

这对我有用:

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

这样做之后,我可以使用以下语法:

git checkout branch_name
git pull --rebase
git push
于 2015-05-26T22:56:30.227 回答
12

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

当您克隆存储库时,它通常会自动创建一个 master跟踪origin/master. 这就是为什么开箱即用,没有其他参数git push的 原因。git 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"
于 2013-10-09T18:36:58.227 回答
8

如果你已经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
于 2017-02-28T07:13:01.313 回答
0

我需要将我的 repos 与 master 分支同步,所以我最终得到了一个简单的 bash 脚本,它可以获取更改并将 rebase 到 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" 
于 2021-12-10T14:04:38.467 回答
-2

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

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

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

git config --global pull.default current

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

于 2014-01-10T17:21:22.860 回答
-9

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

git config --global pull.default current

只需将“pull”更改为“push”即可获得与“git push”相同的效果。

于 2013-11-30T23:06:04.723 回答