Git 之 问题集锦
准备:远程仓库名:origin 远程分支:master、tt 本地分支:master、test
1. error: src refspec *** does not match any
原因:$ git push origin tt
将本地的tt分支推送到远程仓库origin的tt分支,如果远程tt分支不存在则会创建
而本地没有tt分支,故报错。
解决方法:$ git push origin test ----> 保证本地分支和要推送的分支名一样,远程分支为test
或 $ git push origin test:tt ----> 将本地的test分支推送到远程tt分支
下面使用第二种方法:
【push用法】$ git push <远程主机名> <本地分支名>:<远程分支名>
当要推送的分支名和远程分支名一致时,可缩写为: $ git push <远程主机名> <分支名>
当要推送的当前分支名与远程分支名一致时,可缩写为: $ git push <远程主机名>
例:$ git push origin test:master
将本地分支test推送到远程仓库origin的master分支上
$ git push origin test
将本地分支test推送到远程仓库origin的test分支上
$ git push origin
推送本地分支到相应的远程仓库origin的分支上,即本地tt分支对应远程tt分支
2. ![rejected] **** -> master (fetch first) 更新拒绝
原因:远程仓库origin的master内容与本地test分支的内容不一样,而本地test分支在开发前没有更新代码,故提交时会出现更新拒绝。
解决方法:$ git pull origin master ----> 需要拉下来远程仓库的哪个分支,就将master替换成那个分支名,因为上面是要将本地test分支提交到远程master分支,所以这里写的是master。(本地所在分支为tt分支)
3. 自动合并失败,合并冲突
在解决问题2的时候,可能会遇到合并冲突的问题:
原因:远程仓库master分支中有文件的内容有改动(例子中为bbb.txt文件)与本地test分支的内容不一样。
而 $ git pull origin master 相当于先 $ git fetch master 后再 $ git merge origin/master,
所以在merge时,发生了冲突事件。
解决方法:修改有冲突的文件后,重新git add 或 git commit -a,然后再git push
【pull用法】$ git pull <远程主机名> <远程分支名>:<本地分支名>
当要更新合并到本地当前分支时,可缩写为: $ git pull <远程主机名> <远程分支名>
若当前分支与远程分支存在追踪关系,可缩写为:$ git pull <远程主机名>
设置追踪关系:$ git branch --set-upstream <本地分支名> <远程主机名>/<远程分支名>
默认本地master分支自动”追踪”远程origin的master分支。
例:$ git pull origin master:test
取回远程origin的master分支,并与本地test分支合并
$ git pull origin master
取回远程origin的master分支,并与本地当前分支合并
$ git branch --set-upstream test origin/tt
指定本地test分支追踪远程origin的tt分支
$ git pull origin
本地的当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并
【merge用法】将远程仓库分支与本地当前分支合并:$ git merge <远程主机名>/<远程分支名>
将本地其他分支与本地当前分支合并:$ git merge <本地分支名>
例:$ git merge origin/tt
将远程origin的tt分支合并到当前分支
$ git merge test
将本地test分支合并到当前分支
4. Already up-to-date 和 Everything up-to-date
原因:Already up-to-date发生在merge时,Everything up-to-date发生在push时。
主要是因为merge/push的本地分支与远程分支一致,并无改变。
解决方法:正常开发即可。