1.关于本地库和远程库main和master的问题
刚开始使用github和git时,你可能会按以下(错误)步骤操作:
创建一个仓库,命名,描述,然后添加README和license。
这里我们注意最后一句话:
github告诉我们它将会为我们的新仓库创建main作为默认的branch。
然后我们的新仓库就创建好了,同时,我们希望在本地也创建一个文件夹与这个仓库建立联系,这样我们就可以在本机的command使用git直接向远程仓库commit我们的代码,而不用打开github。
这里我在d盘创建了一个example文件夹作为本地仓库的载体(默认git已经安装并配置好了),
执行 git init 指令在这个文件夹创建了一个仓库。
随后我在example文件夹中创建一个新文件hello world.txt,现在我希望commit本次更改到我刚刚创建好的github仓库,首先我复制了我远程仓库的地址:
执行git remote add … …指令与远程仓库的建立连接:
然后git add .提交到缓冲区,git commit -m "…"提交commit,一切看起来那么顺利,只需最后git push 就愉快的结束了。
这里我们还记得github为我们创建的默认分支main,我们push到这个分支。
糟糕的部分来了:
error: src refspec main does not match any
1
接下来我们分析上面步骤错误的原因:
mian 和 master
你可能已经注意到了,在我们每次使用git指令时,git都在一直用蓝色的字提示我们当前处在一个叫master的分支:
这是git为我们创建的默认分支,而在上述过程中我们完全无视了这一点,我们只关心github上的那个main分支,至于为什么它们的默认分支不同,github给出的解释是:
GitHub is working on replacing the term “master” on its service with a neutral term like “main” to avoid any unnecessary references to slavery
github觉得master有点slavery那味。
所以原因就是github的仓库中没有master这个分支,我们本地的仓库没有main分支,那好办,我们将本地仓库的master分支改名为main分支,它们不就统一了?
执行git branch -m master main,可以看到master已经被成功改为main了,如此,我们继续push就不会有什么问题了吧?
! [rejected] main -> main (non-fast-forward)
这个问题解释起来很简单,还记得我们创建仓库时添加到README和license吗?在github仓库的main分支中有这两个文件,而在我们本地的仓库并没有这两个文件,如果我们执行这次commit,那么可能导致这两个文件丢失。
接下来你有以下几个解决方案:下列代码中的example为远程仓库名称
无视警告,README和license我不要了。
**git push --force**
1 执行以上指令强行提交。
2. 试着获取远程仓库的初始提交( initial commit),就是README和license这两个文件的commit,在此基础上 rebase commit。但是这种方法 可能有点棘手,不如暴力提交简单。
1git fetch example //获取初始提交
2git rebase example/mian
3.试着合并初始提交与你的提交,这也是我最推荐的方法:
1git fetch example
2git merge --allow-unrelated-histories example/main
首先执行git fetch example 获取初始提交
然后执行git merge --allow-unrelated-histories example/main合并,之后会进入这样一个文件,提示我们为本次提交加一些信息备注,我们很清楚我们在做什么,所以按两下ESC键,输入**:wq**(注意有冒号,这是UNIX保存的命令),回车
可以看到本地的git仓库已经与远程仓库合并了,README和license也可以在本地仓库找到了。
最后我们git push example main
原文链接:https://blog.csdn.net/gongdamrgao/article/details/115032436
关于本地新增了文件但是git status不更新
可能是新增了文件夹,需要新增除文件夹的文件就可以更新。