github常见问题【转自百度知道】

时间:2023-02-11 00:29:51
配置全局的用户名和邮箱,这样push代码不用每次都输入
$ git config --global user.name "Your Real Name"
$ git config --global user.email you@email.address
正常使用git在本地创建一个项目的过程(根据自己的情况调整顺序)
$ makdir ~/hello-world //创建一个项目hello-world
$ cd ~/hello-world //打开这个项目
$ git init //初始化
$ touch README
$ git add README //更新README文件,更新全部 git add .
$ git commit -m ‘first commit’ //提交更新,并注释信息“first commit”
$ git remote add origin git@github.com:defnngj/hello-world.git //连接远程github项目,使用ssh方式, 也可以使用https方式git remote add origin https://github.com/IFWEB/node-deploy.git 也可以使用git clone origin https://github.com/IFWEB/node-deploy.git 方式克隆远程项目
$ git pull origin master //从git上下载代码到本地,如果报fatal: refusing to merge unrelated histories错误,则需要加上 --allow-unrelated-histories
$ git push -u origin master //将本地项目更新到github项目上去
一些可能遇到的问题解决:
如果输入$ git remote add origin git@github.com:djqiang(github帐号名)/gitdemo(项目名).git
提示出错信息:fatal: remote origin already exists.
解决办法如下:
1、先输入$ git remote rm origin
2、再输入$ git remote add origin git@github.com:djqiang/gitdemo.git 就不会报错了!
3、如果输入$ git remote rm origin 还是报错的话,error: Could not remove config section ‘remote.origin’. 我们需要修改gitconfig文件的内容
4、找到你的github的安装路径,我的是C:\Users\ASUS\AppData\Local\GitHub\PortableGit_ca477551eeb4aea0e4ae9fcd3358bd96720bb5c8\etc
5、找到一个名为gitconfig的文件,打开它把里面的[remote "origin"]那一行删掉就好了!
如果输入$ ssh -T git@github.com
出现错误提示:Permission denied (publickey).因为新生成的key不能加入ssh就会导致连接不上github。
解决办法如下:
1、先输入$ ssh-agent,再输入$ ssh-add ~/.ssh/id_key,这样就可以了。
2、如果还是不行的话,输入ssh-add ~/.ssh/id_key 命令后出现报错Could not open a connection to your authentication agent.解决方法是key用Git Gui的ssh工具生成,这样生成的时候key就直接保存在ssh中了,不需要再ssh-add命令加入了,其它的user,token等配置都用命令行来做。
3、最好检查一下在你复制id_rsa.pub文件的内容时有没有产生多余的空格或空行,有些编辑器会帮你添加这些的。
如果输入$ git push origin master
提示出错信息:error:failed to push som refs to …….
解决办法如下:
1、先输入$ git pull origin master //先把远程服务器github上面的文件拉下来
2、再输入$ git push origin master
3、如果出现报错 fatal: Couldn’t find remote ref master或者fatal: ‘origin’ does not appear to be a git repository以及fatal: Could not read from remote repository.
4、则需要重新输入$ git remote add origin git@github.com:djqiang/gitdemo.git
push时提示remote: Permission to IFWEB/node-deploy.git denied to user. fatal: unable to access 'https://github.com/user/xxx.git/': The requested URL returned error: 403
解决办法:
1.当前用户对https://github.com/user/xxx.git没有写权限,需要配置
注意:在将数据push到远程服务器之前,需要在github上手动建立一个repository,否则老是会报fatal: Could not read from remote repository.的错误
.gitignore书写规则见http://www.cnblogs.com/haiq/archive/2012/12/26/2833746.html

1. Git add 添加 多余文件 
这样的错误是由于, 有的时候 可能

git add . (空格+ 点) 表示当前目录所有文件,不小心就会提交其他文件

git add 如果添加了错误的文件的话

撤销操作

git status 先看一下add 中的文件

git diff 可以对比所有的更改,退出git diff状态直接使用q键即可
git reset HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了 
git reset HEAD XXX/XXX/XXX.Java 就是对某个文件进行撤销了

2. git commit 错误

如果不小心 弄错了 git add后 , 又 git commit 了。 
先使用 
git log 查看节点 
commit xxxxxxxxxxxxxxxxxxxxxxxxxx 
Merge: 
Author: 
Date:

然后 
git reset commit_id

over

PS:还没有 push 也就是 repo upload 的时候

git reset commit_id (回退到上一个 提交的节点 代码还是原来你修改的) 
git reset –hard commit_id (回退到上一个commit节点, 代码也发生了改变,变成上一次的)

3.如果要是 提交了以后,可以使用 git revert

还原已经提交的修改 
此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交 
git revert HEAD 撤销前一次 commit 
git revert HEAD^ 撤销前前一次 commit 
git revert commit-id (撤销指定的版本,撤销也会作为一次提交进行保存) 
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。

fatal: Unable to create 'XXX/.git/index.lock’: File exists.的解决办法

4.标记解决冲突

内容冲突的解决办法

发现冲突

一般来讲,出现冲突时都会有“CONFLICT”字样:
$ git pull
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
 
但是,也有例外,repo sync的报错,可能并不是直接提示冲突,而是下面这样:
error: project mini/sample
注:无论是否存在冲突,只要本地修改不是基于服务器最新的,它都可能报告这个错误,解决方法都是一样。
 
这个时候,需要进入报错的项目(git库)目录,然后执行git rebase解决:
git rebase remote-branch-name

冲突解决的一般过程

merge/patch的冲突解决

先编辑冲突,然后git commit提交。
注:对于git来讲,编辑冲突跟平时的修改代码没什么差异。修改完成后,都是要把修改添加到缓存,然后commit。

rebase的冲突解决

rebase的冲突解决过程,就是解决每个应用补丁冲突的过程。
解决完一个补丁应用的冲突后,执行下面命令标记冲突已解决(也就是把修改内容加入缓存):
git add -u
注:-u 表示把所有已track的文件的新的修改加入缓存,但不加入新的文件。
 
然后执行下面命令继续rebase:
git rebase --continue
有冲突继续解决,重复这这些步骤,直到rebase完成。
 
如果中间遇到某个补丁不需要应用,可以用下面命令忽略:
git rebase --skip
 
如果想回到rebase执行之前的状态,可以执行:
git rebase --abort
 
注:rebase之后,不需要执行commit,也不存在新的修改需要提交,都是git自动完成。

编辑冲突的方法

直接编辑冲突文件

冲突产生后,文件系统中冲突了的文件(这里是test.txt)里面的内容会显示为类似下面这样:
a123
<<<<<<< HEAD
b789
=======
b45678910
>>>>>>> 6853e5ff961e684d3a6c02d4d06183b5ff330dcc
c
其中:冲突标记<<<<<<< (7个<)与=======之间的内容是我的修改,=======与>>>>>>>之间的内容是别人的修改。
此时,还没有任何其它垃圾文件产生。
 
最简单的编辑冲突的办法,就是直接编辑冲突了的文件(test.txt),把冲突标记删掉,把冲突解决正确。

其他帮助查看:http://blog.jobbole.com/87700/