git - 为什么要在命令行上为 `git pull` 指定一个分支?
问题描述
我不想设置默认源服务器,也不想为分支设置上游。
对于push
我配置push.default=current
为能够运行的命令:
git push origin
我也希望能够运行:
git pull origin
但得到错误:
You asked to pull from the remote 'origin', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.
如何绕过此错误消息?
解决方案
您已经关闭了一个选项(即,您拒绝设置上游),因此您别无选择:您必须指定分支。请注意,您可以编写自己的工具来执行此操作。
为何会出现这种情况的答案是复杂的、哲学的,取决于维护 Git 的人。不过,从根本上说,我们可以看看这些事实:
在 Git 中,
push
动词不是动词的反义词pull
。就对立面而言,它们是push
和fetch
。(pull
动词的意思是“获取,然后合并或变基”,或多或少。)尽可能接近,
push
并且fetch
不对称。当您使用时,您将来自另一个存储库的提交带入您的存储库,然后设置远程跟踪名称以指向最尖端的此类提交。另一个存储库有一些分支B 1 ...B n,对于每个这样的名称,您的存储库现在都有一个 up-to-date 。git fetch remote
remote/Bi
另一方面,由于您将您设置
push.default
为current
,当您使用 时,您的 Git 会为您当前的分支C发送任何所需的提交,然后要求远程将其分支C设置为指向同一个提交。在C前面没有插入限定符,例如,使它对你来说是唯一的;你让他们的 Git直接设置他们的名字C。git push remote
remote
eugen/
即使您使用了其他推送设置,通常您仍然会要求遥控器设置自己的分支。该
fetch
命令将整个名称空间专用于每个遥控器:您设置的是您的 ,而不是您自己的。push 命令让他们设置他们的.refs/remotes/remote/renamed
refs/heads/name
refs/heads/name
这里有一个内置于 Git 的假设:从多个中获取,推送到一个。 这个假设不一定成立,但可用的语法和远程跟踪命名空间系统是为了支持它而构建的。当你跳出这个系统时,你必须使用一种稍微笨拙的语法。如何处理是你的选择(Git 有很多工具)。
如果您只从一个获取并推送到一个,那么您根本不需要命名遥控器(origin
如果只有一个,为什么还要打扰?)。Git 甚至可以默认假设分支名称在 fetch-from 和 push-to 上总是相同的,并且在不需要任何上游设置的情况下使 fetch 和 push 工作。当然,这将限制您从一推到一获取。
如果 Git 假设从多个系统中获取,推送到多个系统,它可能有办法做你想做的事。但它没有(假设这一点),所以它没有(有办法做你想做的事)。
推荐阅读
- android - 拖动时如何更新 SeekBarPreference 值?
- redis - 下划线作为redis中的键
- html - 角度材料步进器无法与角度形式的 mat-grid-list 一起正常工作
- ios - 我有一个表格视图单元格,我从视图控制器调用一个函数,该函数位于表格视图单元格中,如图所示,但它显示错误
- events - Linux:使用 entr 和 mutt 创建新文件时发送电子邮件
- opengl - GLUT 叠加层有什么用?
- makefile - Makefile % match-anything 规则选择“Makefile”目标
- arrays - 如何获取当前用户表单firebase的数据?
- java - 如何在 JPA 审计中强制 @CreatedBy 的值
- spring-boot - 如何解决“Web 应用程序 [myapp] 似乎已经启动了一个名为 [HikariPool-113 管家] 的线程但未能阻止它”?