Git别名,适用于'main'或'master'或其他
在git中有各种各样的默认分支选择,如何编写一个脚本/别名来引用默认分支,而不管其名称如何 我的具体示例是我的别名,它重新绑定到最新的远程主机上:Git别名,适用于'main'或'master'或其他,git,Git,在git中有各种各样的默认分支选择,如何编写一个脚本/别名来引用默认分支,而不管其名称如何 我的具体示例是我的别名,它重新绑定到最新的远程主机上: ### version for `master` # rebaseOn = "!f() { BRANCH=$(git symbolic-ref --short HEAD) && git fetch && git pull --rebase; git rebase origin/${1:-master};
### 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
或master
或default
或trunk
到目前为止,我发现:
git remote show upstream | grep“HEAD branch”| sed的/*:/'
,但插入别名的时间相当长
还有比这更好的选择吗
目前为止的最佳答案 用我自己的话重申当前的最佳答案: @使用
git分支的方法--将上游设置为:
- 我假设您在最初克隆一个repo时设置了
git branch——将上游设置为,并且在每次接触repo时都要非常一致地运行该命令
- 因此,您可以忽略github或类似的东西所说的默认主控,并且知道在您的这个设置中,您总是在本地使用您的首选项
- 与结对编程或任何必须回到标准行为的编程相反
- 然后在重定基址到
default
之前,您必须pull
选择名称(编写此脚本),以便在重定基址之前包含任何新提交
- 因此,如果您使用一个分支与在
default
上处理其他内容并行工作,那么使用此方法无法真正做到这一点,始终需要一个单独的分支来处理尚未准备好推送的提交
- 然后,您可以合并到
默认值中
,无需额外工作即可进行推送
合并可能会稍微好一些(git总是这样)
注:真正令人沮丧的是,回购协议既有master
分支,又有main
分支,而且很难通过CLI记住/知道/发现哪个是主要分支(必须git日志
,查看日期,记住相当模糊的命令,或检查github。所有这些都需要2秒钟以上的时间和上下文更改,才能了解挫折的程度)您在这里有许多选项。但是,我建议您不要使用我在这里列出的选项,因为您的分支名称是您的。您没有理由需要使用与其他存储库相同的名称。这也是为什么
不过,您的选择包括:
- 在您自己的存储库中阅读
origin/HEAD
repo-A$ git symbolic-ref refs/remotes/origin/HEAD
refs/remotes/origin/master
repo-B$ git symbolic-ref refs/remotes/origin/HEAD
refs/remotes/origin/main
其中,repo-A是使用master
的较旧存储库的克隆,repo-B是使用main
的较新存储库的克隆
请注意,您可能偶尔需要运行git remote set head--auto
,让您的git注意到他们的git已将master
重命名为main
,从而更新您的origin/head
以匹配。您的origin/head
是在运行git clone
时建立的,之后不会更新,除非您使用git-remote-set-head--auto
。您当然可以将此git-remote-set-head
操作放入您的别名中
- 使用
git remote show
,正如您所示。它位于别名中:为什么您关心别名的长度
- 使用上游设置(
git分支——将上游设置为
)然后只需运行git-rebase
,以选择当前分支的上游。当然,对于分支name
,这将主要是origin/name
;大概是在您想要更新name
之前,在origin上强制更新名为name
的分支时使用了这个别名
。如果是,则此选项不正确
- 编写一个脚本。将脚本放在
$PATH
中的某个地方,例如,将其命名为默认分支上的git-rebase
。在默认分支上运行git-rebase将运行您的脚本。现在,它不是别名,而是一个您喜欢的任何语言的脚本,您可以在其中放入任意数量的代码,使这是你想要的最聪明和最花哨的。(我知道,这也是。)
毫无疑问还有更多,但这至少应该包括一些基础。继续从great开始,您可以这样设置别名:
main=!git symbolic ref refs/remotes/origin/HEAD | cut-d'/'-f4
remotesh=远程设定头原点--自动
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)--无验证$@;};f”
gitmain
将返回当前“main”分支(main/master)的名称
在其他别名中,使用$(git main)
而不是硬编码的master
分支名称。请记住,它需要是一个shell脚本(以!
开头),以便实际插入$(git main)
如果使用fatal:ref-refs/remotes/origin/HEAD的任何别名错误不是符号ref
,那么只需运行git-remotesh
不要使用别名,只需创建git-rebaseOn
bash脚本,您可以使用git-rebaseOn
调用它。您是否想得太多了?t的名称没有什么特别之处分支,那么为什么不在本地将其更改为master
或main
或任何您喜欢的一致名称,同时将远程跟踪分支挂接到远程上的正确分支?没有法律规定您的本地名称必须与远程名称匹配,您知道。@matt,是的,没有任何规定