git - Git 别名,适用于 `main` 或 `master` 或其他
问题描述
使用 git 中的各种默认分支选择,我如何编写引用默认分支的脚本/别名,无论名称如何?
我的具体示例是我的别名,它基于最新的远程主机:
### version for `master`
# rebaseOn = "!f() { BRANCH=$(git symbolic-ref --short HEAD) && git fetch && git pull --rebase; git rebase origin/${1:-master}; }; f"
### version for `main`
rebaseOn = "!f() { BRANCH=$(git symbolic-ref --short HEAD) && git fetch && git pull --rebase; git rebase origin/${1:-main}; }; f"
用法:git rebaseOn
或git rebaseOn newParentBranch
(因为它默认输入${1:-main}
)
我希望该命令适用于那里的任何一个版本,因为我使用的各种存储库都有main
ormaster
或default
ortrunk
到目前为止,我已经找到了https://stackoverflow.com/a/50056710/356218:git remote show upstream | grep "HEAD branch" | sed 's/.*: //'
但这对于插入别名来说相当长。
还有比这更好的选择吗?
迄今为止最好的答案
用我自己的话重述当前的最佳答案:
@matt 建议使用git branch --set-upstream-to
:
- 我想你是
git branch --set-upstream-to <main/master>
在最初克隆一个 repo 时设置的,并且对于你接触的每个 repo 都运行该命令非常一致 - 因此,您可以忽略 github 或诸如此类所说的默认主服务器,并知道在您的此设置中,您始终在本地使用您的偏好
- 与结对编程或任何你必须回到标准行为的东西相反
- 然后在变基之前
default
,您必须pull
选择名称(脚本 this),以便在变基之前包含任何新提交- 因此,如果您正在使用一个分支与处理其他事情并行工作,那么
default
您无法使用这种方法真正做到这一点,总是需要一个单独的分支来处理尚未准备好推送的提交
- 因此,如果您正在使用一个分支与处理其他事情并行工作,那么
- 然后您可以合并
default
并推送而无需额外的工作
合并可能会稍微好一些(就像 git 一样)
注意:真正令人沮丧的是,当一个 repo 同时具有 amaster
和main
分支时,很难通过 CLI 记住/知道/发现哪个是主要的(必须git log
查看日期,记住相当晦涩的命令,或查看 github。所有这些都需要超过 2 秒和上下文变化,以了解挫折的程度)
解决方案
继续伟大的@torek 的评论,你可以像这样设置你的别名:
main = !git symbolic-ref refs/remotes/origin/HEAD | cut -d'/' -f4
remotesh = remote set-head origin --auto
com = "!f(){ git checkout $(git main) $@;}; f"
upm = "!f(){ git pull --rebase --autostash origin $(git main) $@;}; f"
rebasem = "!f(){ git rebase -i --autosquash origin/$(git main) --no-verify $@;}; f"
git main
将返回当前“主”分支(主/主)的名称。
在其他别名中使用$(git main)
而不是硬编码的master
分支名称。请记住,它需要是一个 shell 脚本(以 开头!
),以便$(git main)
实际插入。
如果有任何别名错误fatal: ref refs/remotes/origin/HEAD is not a symbolic ref
,则只需运行git remotesh
.
推荐阅读
- google-sheets - 在 Google 表格中组织预订
- javascript - 如何从列表中创建数组
- kubernetes - 通过前端 UI 触发 api 的部署
- android - 有没有办法知道视图如何为空,即使它已被声明和调用?
- c++ - 值未打印出来
- flutter - 使用 Dio 从 Flutter Web 发出 HTTP 请求时,正文和标头消失
- python - 无法完成此 python 代码
- elasticsearch - 如何在弹性搜索中将首字母缩略词实现为同义词?
- c# - 当显示的项目发生变化时,将从网络下载的图像更改为 CarouselView
- c# - 当原点离物体太近时,Raycast 停止检测