gpt4 book ai didi

git - 推送新分支后自动设置上游

转载 作者:太空狗 更新时间:2023-10-29 14:04:59 26 4
gpt4 key购买 nike

事情是这样的:

$ git checkout -b new-branch
Switched to a new branch 'new-branch'

$ git push
...
* [new branch] new-branch -> new-branch

$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to rebase against.
See git-pull(1) for details.

git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream-to=origin/<branch> new-branch

我看过其他问题,答案建议在第一次推送时执行 git push -u。但我总是忘记这样做。

当新分支从我的仓库推送到远程仓库时,是否有配置选项自动设置上游跟踪分支?

最佳答案

Is there a configuration option to [imply -u when the branch gets created by git push]?

可能应该是,但没有。但是,您可以在之后使用 git branch --set-upstream-to 解决问题,就像在 Git 错误消息中一样。

与其他答案一样,您可以设置一些别名。扩展一下 fracz's answer , 使用 -u 是安全的每次选项:这将在每次推送时设置上游,但假设您总是推送到同一个地方,您将“更改”上游 origin/<em>branch</em>origin/<em>branch</em>每次,即实际上没有改变任何东西。

除了进度输出,甚至没有办法判断是否git push实际上在 Remote 上创建了分支。 (push 命令本身可以分辨,但它只报告 这条消息,[new branch] 或不是[new branch]。)你可以通过运行 git ls-remote 得到相当接近的结果。在 push 之前,但这里有一场比赛:if ls-remote报告该分支不存在,并且推送成功,您不确定您的推送是否创建了它,因为极有可能是其他人创建了它,但您的推送还是成功了。

然而,很容易判断在您的 git push 之前是否有上游。开始了。

这是一个(有些不完美且完全未经测试的)脚本,它可以实现我的想法 git push实际上应该可以。

#! /bin/sh
#
# Push, and set upstream if the push succeeds and
# there was no upstream set before the push started,
# based on "push.set-upstream" setting

die() {
printf "%s\n" "$1" 1>&2
exit 1
}

get_current_branch() {
git symbolic-ref -q --short HEAD ||
die "fatal: not currently on a branch"
}

get_remote() {
git config --get branch."$1".remote || echo origin
}

upstream_is_set() {
git rev-parse -q --verify "$1@{u}" >/dev/null 2>&1
}

# arguments are: [remote [branch]]
# we do not accept arbitrary refspecs here!

case $# in
0) branch=$(get_current_branch) || exit $?
remote=$(get_remote "$branch")
;;
1) remote="$1"
branch=$(get_current_branch) || exit $?
;;
2) remote="$1" branch="$2";; # should check $2 ref format?
*) die "usage: gitpush [remote [branch]]";;
esac

how_to_set=$(git config --get push.set-upstream || echo auto)

case "$how_to_set" in
always|true) do_set=true;;
false) do_set=false;;
auto|only-if-unset) if upstream-is-set "$branch"; then
do_set=false
else
do_set=true
fi;;
*) die "fatal: don't understand push.set-upstream=$how_to_set";;
esac

# figured everything out, so now push; fail if push fails
git push "$remote" "$branch" || exit $?

# last, set upstream if still needed
if $do_set; then git branch --set-upstream-to "$remote/$branch"; fi

关于git - 推送新分支后自动设置上游,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37976562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com