Git使用教程(三)常见Bug及其解决方案.md

通过学习Git使用教程(一), Git使用教程(二),你已经对git的基本使用有了一定的了解,这篇文章主要介绍git使用中经常遇到的一些问题

##使用 git remote add origin git@github.com:xxx/xxx.git 命令关联本地和远程仓库的时候报没有权限错,如下所示

1
2
3
4
5
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

原因是由于你在本地(或者服务器上)没有生成ssh key, 解决办法如下: 查看本地是否有ssh key,查看方法如下:

1
2
3
4
5
cd ~/.ssh
//有, 直接跳到第四部
id_rsa		id_rsa.pub	known_hosts
//没有, 从第一部开始
known_hosts

第一步,git config --global --list ,检验本地是否已经配置git的用户名和邮箱,有直接进行第三步

第二步,git config –global user.name “yourname”,git config –global user.email myemail@qq.com 设置全局用户名和邮箱,

第三步,ssh-keygen -t rsa -C “这里换上你的邮箱”,生成秘钥,

第四步,到git仓库,添加秘钥,打开id_rsa.pub,复制里面的内容,打开你的githuh主页,setting,添加ssh key

第五部,ssh -T git@github.com 测试一下通不通,不通就是ssh-agent -s ssh-add ~/.ssh/id_rsa 操作这两步.

使用 git pull 无法拉取服务器资源

错误详情如下:

1
2
3
4
	error: Your local changes to the following files would be overwritten by merge:
		xxx
	Please commit your changes or stash them before you merge.
	Aborting

解决方法一: 想保留刚才本地修改的代码,并把git服务器上的代码pull到本地

1
2
3
git stash
git pull origin master
git stash pop

如此一来,服务器上的代码更新到了本地,而且你本地修改的代码也没有被覆盖,之后使用add,commit,push 命令即可更新本地代码到服务器了。

解决方法二: 不需要保存本地修改的代码

1
2
	git reset --hard
	git pull origin master

##git status发现有文件没有被追踪

Untracked files: (use “git add ..." to include in what will be committed)

1
../Resource/

解决办法: 使用git add ../Resource 将文件添加的到追踪即可

附录一:

常用git命令

命令 描述 注意事项  
open . 单开当前目录所在的finder    
pwd 命令用于显示当前目录    
ls -ah 查看当前目录下的隐藏文件    
git log –graph 打印提交日志,可以查看分支图    
git add fileName 添加文件名为fileName的文件到暂存    
git add . 添加所有的文件到暂存    
git commit -m”des” 把暂存区的文件提交到本地分支, des为本次提交的描述    
git push origin master 将本地文件提交的远程仓库的master分支,一般master分支为主分支    
git log 显示从最近到最远的提交日志    
git reflog 显示之前每一次的操作命令    
git log –pretty=oneline 单行输出提交日志 commit_id显示完全  
git log –oneline 单行输出提交日志 commit_id只显示前7位  
git log –graph –pretty=oneline –abbrev-commit 打印提交历史信息,带分支信息    
git reset –hard HEAD^ 回退到上一个版本, head为当前版本, head^为上一个版本, head^^为上两个版本, 同理    
git reset –hard commit_id 和上面的命令功能一样, 指是回退到commit_id的版本, commit_id可以不用写全    
git reflog 用来记录你的每一次命令    
git status 常看当前工作区的状态    
git diff HEAD – fileName 查看文件在工作区和版本库里面最新版本的区别    
git checkout – file 丢弃文件名为file在工作区的修改    
git reset HEAD 可以把暂存区的修改撤销掉,重新放回工作区 例如使用git add file将工作区的文件添加到暂存区时候想要使用git checkout file来撤销修改是无法生效的,你要先使用git reset head file来把在暂存区的修改撤销,重新放回工作区后git checkout file才能生效  
git rm 用于删除一个文件    
git remote add origin git@github.com:michaelliao/learngit.git 把一个已有的本地仓库与之远程仓库关联    
git push -u origin master 关联本地和远程仓库后第一次将本地提交到远程仓库 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,其他时候可以不加  
git clone git@github.com:michaelliao/gitskills.git 从远程仓库克隆一个本地仓库    
git checkout -b dev 创建一个名为dev的分支,等效于下面两条命令    
git branch dev 创建名为dev的分支    
git checkout dev 切换到dev分支    
git branch 查看所有的分支    
git merge dev 合并分支 合并分支要先切换到主分支  
git branch -d dev 删除分支 需要先合并之后才能删除, 如果要强行删除使用下面这条命令  
git branch –set-upstream-to=origin/dev dev 将本地dev分支和远程的dev分支关联    
git branch -D dev 强行删除分支    
git merge –no-ff -m “merge with no-ff” dev 合并dev分支 合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并  
git stash 把当前工作现场“储藏”起来,等以后恢复现场后继续工作    
git stash list 查看储藏起来的工作区    
git stash apply stash_id 恢复储藏的工作区 此命令恢复后,stash内容并不删除,你需要用git stash drop来删除  
git stash pop 恢复储藏的工作区,同时删除储藏的工作区    
git remote 查看远程仓库信息    
git remote -v 查看远程仓库详情    
git pull 将远程仓库同步到本地    
git pull origin dev 将远程仓库中dev分支同步到本地    
git checkout -b branch-name origin/branch-name 在本地创建和远程分支对应的分支 本地和远程分支的名称最好一致  
git branch –set-upstream branch-name origin/branch-name 建立本地分支和远程分支的关联    
git rebase rebase操作可以把本地未push的分叉提交历史整理成直线    
git tag v1.0 创建一个名为v1.0的标签    
git tag v0.9 commit_id 在对应的commit_id处打上v0.9的标签    
git tag 查看所有的tag    
git show v0.9 查看v0.9这个标签的详情    
git tag -a v0.1 -m “version 0.1 released” commit_id 在对应的commit_id处创建带有说明的标签    
git tag -d v0.1 删除标签v0.1    
git push origin v1.0 推送v0.1到远程版本库    
git push origin –tags 一次性推送所有未提交的tags到远程仓库    
git push origin :refs/tags/v0.9 删除远程仓库的某个标签 注意先从本地删除:git tag -d v0.9  

附录二:

The following is a list of optional inline markups supported:

Option name Markup Result if enabled
Intra-word emphasis So A*maz*ing So Amazing
Strikethrough ~~Much wow~~ Much wow
Underline [^under] _So doge_ So doge
Quote [^quote] "Such editor" Such editor
Highlight ==So good== So good
Superscript hoge\^(fuga) hogefuga
Autolink http://t.co http://t.co
Footnotes [\^4] and [\^4]: [^4] and footnote 4

各种工具命令大全

git命令大全