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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/benben_2015/article/details/82867345

出现的场景

在本地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 不能干净利落地完成这个任务,它将禁止切换分支。

猜你喜欢

转载自blog.csdn.net/benben_2015/article/details/82867345