You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Git别名能否无需Shell传递参数?能否默认远程为upstream?

关于Git别名参数传递与默认远程配置的问题

1. Git别名无需Shell能否传递参数?

完全可以!Git原生支持在别名中使用位置参数($1$2等),不需要依赖Shell解释器。你定义的这个reup别名就是一个完美的例子:

[alias]
reup = branch --set-upstream-to=upstream/$1 $1

当你执行git reup master时,Git会自动把$1替换成master,最终执行的命令就是:

git branch --set-upstream-to=upstream/master master

完全符合你的需求。不过要注意,这种参数传递只适用于单一Git命令的别名,如果别名需要执行多个命令或者更复杂的逻辑,才需要用!前缀调用Shell(比如reup = !git branch --set-upstream-to=upstream/$1 $1 && echo "Tracking set"),但你的场景完全不需要。

2. 能否配置Git始终默认使用upstream作为远程?

当然可以,有几种配置方式满足不同需求:

全局默认推送远程

如果你希望所有仓库执行git push时,默认都使用upstream作为远程,可以全局配置:

git config --global remote.pushDefault upstream

这样不管当前分支有没有追踪信息,不带参数的git push都会推送到upstream的对应分支(如果分支名匹配的话)。

全局默认拉取远程(Git 2.20+)

Git 2.20版本引入了branch.defaultRemote配置,用来指定当分支没有设置追踪远程时,git pull默认使用的远程仓库。全局配置命令:

git config --global branch.defaultRemote upstream

这样当你遇到开头那种“没有追踪信息”的提示时,直接执行git pull,Git会尝试拉取upstream中与当前本地分支同名的分支。

针对特定分支设置默认远程

如果你只想给某个分支(比如master)指定默认远程,可以执行:

git config branch.master.remote upstream
git config branch.master.merge refs/heads/master

这和你用git branch --set-upstream-to=upstream/master master的效果是一样的,但可以手动配置。

内容的提问来源于stack exchange,提问作者gcb

火山引擎 最新活动