从代码库拉取并合并到当前分支的快捷方式

3
在Git中,我使用pull命令从不同的存储库合并,例如:
git pull ../mortoray-main/ mortoray-main

这将从其他仓库提取并合并 mortoray-main 分支到当前仓库的当前分支中。 我要找的是如何设置相应的快捷方式,以便我可以只需执行以下操作:
git pull mortoray

在我的gitconfig中添加了以下内容:

[remote "mortoray"]
    url = ../mortoray-main/
    fetch = mortoray-main

现在的问题是,当我运行git pull mortoray时,会出现错误:“您要从远程'mortoray'拉取,但未指定分支。因为这不是当前分支的默认配置的远程,所以您必须在命令行上指定一个分支。”如何配置远程以使快捷方式像原始pull命令一样工作?
请注意,以下命令可以代替'git pull mortoray',但显然不是快捷方式:
git fetch mortoray
git merge FETCH_HEAD

这正是使用“远程”之外的方法所做的事情:
git pull ../mortoray-main/ mortoray-main

所以问题是关于快捷方式的,我想要一个拉取命令,它可以像原始的拉取命令一样为我执行获取和合并操作。
git pull mortoray

有没有任何配置可以使这个快捷键按预期工作?
3个回答

3

你需要确保你的分支正在跟踪 mortoray 仓库的 mortoray-main 分支:

git branch --set-upstream <your_current_branch> mortoray-main/mortoray

(如 "如何使现有的git分支跟踪远程分支?" 中详细说明)
然后,当拉取 mortoray-main / mortoray 分支时,git pull mortoray 现在应该会将分支进行变基。


这里OP eda-qa-mort-ora-y说:

这不是一种快捷方式,因为我需要不断地切换跟踪分支。
也就是说:

  • 这个分支并没有永久地跟踪那个远程分支,我将在不同的时间从不同的分支合并。
  • 此外,这个分支实际上已经正在跟踪一个远程分支,我想保持它的状态。

关于快捷方式,为了引用当前分支,你可以从 "git push current branch" 中汲取灵感,该命令在 .bashrc 中声明,也适用于 git pull

get_git_branch() {
  echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
}
alias gpull='git pull mortoray-main `get_git_branch`'

如果您想为上游仓库添加参数(即不总是从“mortoray-main”拉取,并且针对一个特定的本地分支,其名称与上游分支不同)
alias gpull='git pull ${1:-origin} $2:`get_git_branch`'

那么gpull mortoray-main mortoray 应该拉取正确的分支并将其 rebase 到你的 当前分支。

OP edA-qa mort-ora-y 提到

我不想指定本地或远程分支名称 -- 我总是从名为 mortoray-main 的分支拉取到我的本地分支中的任何内容。

所以这个别名应该就可以工作了:

gpull='git pull mortoray mortoray:`get_git_branch\`'

这不是一个捷径,因为我需要不断地切换跟踪分支。也就是说,这个分支并没有永久跟踪那个远程分支,我将在不同的时间从不同的分支进行合并。此外,这个分支实际上已经在跟踪一个远程分支,我想保持这种状态。 - edA-qa mort-ora-y
@edA-qamort-ora-y 那么你需要在 git pull 命令中指定你的本地分支:git pull mortoray-main yourBranch - VonC
我知道这个可以工作,这基本上是我的第一个命令(除了URL可以作为远程添加,稍微增加一点)。这意味着没有办法使用一行git命令创建预期的快捷方式。 - edA-qa mort-ora-y
但是我认为整个问题都是避免命名本地分支?至于我的别名中git pull使用的refspec,我已经修复了。我认为shell/alias函数是你最好的选择,并且在各种操作系统上是可移植的(在Windows上,msysgit实现使用标准bash shell)。 - VonC
我不想指定本地或远程分支名称 - 我将始终从名为“mortoray-main”的分支拉取到任何可能是我的本地分支。 - edA-qa mort-ora-y
显示剩余3条评论

0

编辑:我看到你已经拒绝了这个 - 我想我知道你想做什么,你可以使用别名...

基本上,你需要做的是在第一篇帖子中提到的“remote”中添加该远程分支。此时,您应该能够git fetch并在存储库中有一个mortoray/mortoray-main分支(这是远程分支)。

从这里开始的过程是在您要将其合并的分支上进行git fetch && git merge。这可以转换成您的.git/config或~/.gitconfig文件中的别名。类似于以下内容(您可能需要或不需要两个命令前面的git部分):

alias pullmortoray = git pull && git merge

然后你可以使用制表符自动完成输入 git pullmortoray,就完成了!
请忽略下面的内容!!!仅供记录,以防有人已经评论过。
实际上,你在问题中已经接近答案了——远程库是正确的,你只需要设置本地分支跟踪 ../mortoray/mortoray-main 分支即可。
git branch --set-upstream <current-branch> mortoray/mortoray-main

对于每个您希望跟踪mortoray-main分支的分支,请执行此操作,然后简单地使用git pull即可完成。


0

我相信你的问题已经在这里得到了解答。你需要将它放在你的.git/config文件中:

[branch 'mortoray-main']
    remote = mortoray                 # set mortoray as default remote for this branch
    merge  = refs/heads/mortoray-main # set mortoray-main as default remote branch to merge

我没有名为 mortoray-main 的本地分支。pull 命令会将代码拉取到当前分支,这正是我想通过快捷方式复制的行为。 - edA-qa mort-ora-y

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接