pathspec 'master' did not match any files known to git

出现的场景

在本地init一个仓库,然后创建一个develop分支,并在这个分支上进行文件操作,接着commit所做的修改。

$ git init
Initialized empty Git repository in D:/practice/testBranch/.git/
$ git checkout -b develop
Switched to a new branch 'develop'
$ vim a.txt
$ git add a.txt
$ git commit -m "add a new file"
[develop (root-commit) f9ac3b8] add a new file
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt

接着你切到master分支上,进行文件操作。这时就会出现下面的错误:

$ git checkout master
error: pathspec 'master' did not match any file(s) known to git.

出现问题的原因

命令解析

git init命令会默认创建一个master分支,并将HEAD(它是一个特殊的指针,指向当前所在的本地分支)指向到该分支上。虽然如此,但是你通过git branch -a命令来查看本地和远程的分支时,是看不到任何分支的。
git checkout master命令其实做了两件事:一是使HEAD指回master分支;二是将工作目录恢复成master分支所指向的快照内容。

问题分析

HEAD指回master分支后,需要将工作目录恢复到master分支所指向的内容。但是由于你从开始一直在develop分支上进行操作,master分支对应的工作目录相当于还什么都没有,这样就出现匹配不到任何文件。

如何解决

你只需要在初始化一个仓库后,先在master分支上进行一些commit操作,比如增加一个README.md文件,这样就真正创建了一个master分支。例如:

$ git init
Reinitialized existing Git repository in D:/practice/testBranch/.git/
$ vim README.md
$ git add README.md
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory.
$ git commit -m "add a new file"
[master (root-commit) 0e8c7c3] add a new file
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
$ git push
Counting objects: 3, done.
Writing objects: 100% (3/3), 219 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'master' on GitHub by visiting:
remote:      https://github.com/benben/testBranch/pull/new/master
remote:
To github.com:benben/testBranch.git
 * [new branch]      master -> master

在进行push操作时,你就可以看到提示,在远程仓库创建了一个master分支,并且本地的master分支指向远程的master分支。
这时你通过git branch -a就可以看到所有本地和远程的分支。接着就可以创建其他分支,并且可以在master分支之间任意切换。

$ git branch -a
* master
  remotes/origin/master

在切换分支时,一定要注意你工作目录里的文件会被改变。 如果是切换到一个较旧的分支,你的工作目录会恢复到该分支最后一次提交时的样子。 如果 Git 不能干净利落地完成这个任务,它将禁止切换分支。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
官方发行说明: 过滤器规范“--filter = sparse:path = <path>”用于 创建一个惰性/部分克隆已被删除。使用blob 仍支持稀疏规范的项目的一部分 “--filter = sparse:oid = <blob>”选项。 用户界面,工作流程和功能 *“git checkout --no-overlay”可用于触发新模式 检查出树的路径,允许路径 匹配当前索引和工作树中的pathspec 并且不在树上。 *“git log --format = ...”中的%(预告片)格式化现在允许 可选择按关键字选择预告片,仅显示值, 等等 *四个新的配置变量{author,committer}。{name,email} 已经介绍过更具体地覆盖用户。{name,email} 案例。 *命令行完成(在contrib /中)学会了tab-complete “git submodule absorbgitdirs”子命令。 *“git branch”学习了一个新的子命令“--show-current”。 *“diff --cc”的输出没有显示原始路径 合并涉及重命名。一个新选项添加​​了路径 原始树木输出。 *已经教过命令行完成(在contrib /中) 完成更多子命令参数。 *来自“git bisect”的最终报告用于显示疑似 使用原始“diff-tree”的罪魁祸首,没有输出 合并提交。这已更新为使用更现代和 人类可读的输出仍然很简洁。 *“git rebase --rebase-merges”取代旧的“--preserve-merges” 选项; 后者现在标记为已弃用。 *使用--recurse-submodules进行克隆时给出的错误消息 已更新。 *完成帮助程序代码现在关注存储库本地 配置(如果可用),允许--list-cmds兑现 例如,completion.commands的特定于存储库的设置。 *“git mergetool”学会了提供Sublime Merge(smerge)作为其中之一 它的后端。 *当磁盘索引时调用新的钩子“post-index-change” 文件更改,可以帮助例如虚拟化工作树 实现。 *“git difftool”现在可以在存储库外运行。 *“git checkout -m <other>”是关于携带差异的 检查时HEAD和工作树文件之间的转发 另一个分支,忽略了HEAD与之间的差异 指数。该命令已经被教导在索引和中止时中止 HEAD是不同的。 *“index-pack”步骤中添加了一个进度指示器 经常让用户在“git clone”期间等待完成。 *“git submodule”学习允许的“set-branch”子命令 子模块。*。要修改的分支设置。 *“git merge-recursive”后端最近学到了一种新的启发式方法 根据同一目录中其他文件的方式推断文件移动 移动。因为这本身就不那么强大的启发式算法 基于文件本身的内容相似性(而不是 根据其邻居正在做的事情,它有时会给出一个 最终用户意外的结果。这已经降低了 将重命名的路径保留在索引中较高/冲突的阶段中 用户可以检查并确认结果。 *“git tag”学会了建议它可能是一个建议 创建指向的带注释或签名的标记时出错 另一个标签。 *学习“git pack-objects”命令报告数量 它通过trace2机制打包的对象。 *结束时编辑器中显示的冲突路径列表 当剪刀线在剪刀线上方显示出冲突的合并 清理模式设置为“剪刀”,即使它被评论 就像更新的路径列表和其他信息一样 帮助用户更好地解释合并。 * trace2跟踪工具学会了自动生成文件名 当被告知登录目录时。 *“git clone”在交谈时学会了一个新的--server-option选项 协议版本2。 *默认情况下,裸连接位图是创建的 现在存储库; 还创建了路径名哈希缓存 默认为避免在重新包装时产生蹩脚的增量。 *“git branch new A ... B”和“git checkout -b new A ... B” 教导说,在他们的语境中,符号A ... B表示“合并 这两个提交之间的基础“,就像”git checkout A ... B“ 在该提交中分离HEAD。 *更新“git difftool”和“git mergetool”以便组合 {diff,merge}。{tool,guitool}配置变量用作 以合理的顺序相互后备设置。 *“git difftool”的“--dir-diff”模式在“--no-index”中没用 模式; 它们现在被明确标记为互不兼容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值