Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git别名,适用于'main'或'master'或其他_Git - Fatal编程技术网

Git别名,适用于'main'或'master'或其他

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};

在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
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,是的,没有任何规定