1. Authentication failed for
原因:
此错误造成原因是登录git账号时用户名或者密码错误使验证失败导致命令执行不成功,抛出此错误
解决:
1. 找到控制面板——用户账户——凭证管理器,到凭证中去重新修改git地址凭证保存的密码。
2. 打开cmd面板,输入:git config --system --unset credential.helper
,然后重新执行命令,在弹出的用户名及密码框中输入正确的账户密码即可验证通过
2. ! [rejected] master -> master (fetch first)
error: failed to push some refs to 'git@gitee.com:xxxxxxx'
原因:
出现这个问题是因为github中的README.md文件不在本地代码目录中
解决:
可以通过如下命令进行代码合并git pull --rebase origin master
再git push origin master
延伸:
#这三者的区别
1、$ git pull origin master --allow-unrelated-histories #强制合并(允许存在不同的提交历史)两个分支是两个不同的版本,具有不同的提交历史。如果想允许不相关历史提交,强制合并
2、$ git pull --rebase origin master #rebase 和 merge 的区别,merge会形成一个新的提交点,rebase则是在上个分支的基础上重建分,是 git pull 默认的提交方式
#如果发生冲突的话,无论是 merge,还是 rebase,都需要先解决冲突,这个过程需要通过手动解决。比如发现一个文件发生冲突。手动解决完冲突后,
#用 git add 把处理好的内容提交到暂存区。接下来的处理,merge 和 rebase 的操作不同。如果是 merge,通过 git commit 即可。如果是 rebase,
#通过 git rebase --continue,继续执行 rebase 即可。
3、$ git push -f origin master #强烈不推荐使用
3. ! [remote rejected] master -> master (pre-receive hook declined)
原因:
git push不上去的原因在于所push的分支权限为protected,只有项目的管理员或者项目的管理员指派的具有相应权限的人才能进行push
解决:
1.进入所在项目的settings,点击进入Protected branches,点击unprotected将master分支的权限改变,即关闭master的protected权限
2.新建其它分支,将项目push到新建的分支上,后期再进行merge
git branch 分支名 #新建分支
git checkout 分支名 #切换分支
#项目提交
git add .
git commit -m "提交的信息"
git remote add origin 远程仓库地址
git push -u origin 分支名
4.Your local changes to the following files would be overwritten by merge
error: Your local changes to the following files would be overwritten by merge:
protected/config/main.php
Please, commit your changes or stash them before you can merge.
原因:
团队其他成员修改了某文件并已提交入库,你在pull之前修改了本地该文件,等你修改完代码再pull时,这时会报错如下错误.
解决:
#解决方法:
#1. 如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:
git stash #备份当前工作区内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前工作区内容保存到Git栈中
git pull #拉取服务器上当前分支代码
git stash pop #从Git栈中读取最近一次保存的内容,恢复工作区相关内容。同时,用户可能进行多次stash操作,需要保证后stash的最先被取到,所以用栈(先进后出)来管理;pop取栈顶的内容并恢复
然后可以使用git diff -w +文件名 来确认代码自动合并的情况.
#git stash list:#显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
#git stash clear:#清空Git栈
#2. 反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:
git reset --hard
git pull
#其中git reset是针对版本,如果想针对文件回退本地修改,使用
git checkout HEAD file/to/restore
#此方法即版本回退,不建议使用第二种。除非你再三确定不需要本地的修改了。
5. Pull is not possible because you have unmerged files
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
原因:
文件冲突(本地的push和merge会形成MERGE-HEAD(FETCH-HEAD), HEAD(PUSH-HEAD)这样的引用。HEAD代表本地最近成功push后形成的引用。MERGE-HEAD表示成功pull后形成的引用。可以通过MERGE-HEAD或者HEAD来实现类型与svn revet的效果。将本地的冲突文件冲掉,不仅需要reset到MERGE-HEAD或者HEAD,还需要–hard。没有后面的hard,不会冲掉本地工作区。只会冲掉stage区
解决:
#解决方法:
#查看冲突文件
git status #1、也可以告诉我们冲突的文件;
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: file
#2、手动解决冲突,然后提交更改:
vi file
git add file
git commit -m '解决冲突'
#另一种解决方法 错误示范
git reset --hard FETCH_HEAD
git pull
#上面的解决方法非常非常的霸道,是可以解决这个错误,但是它会回到初始的节点,假如我有修改本地代码但是没有提交,那么使用reset初始,可能会丢失这些修改的代码。
//注释:提交本地代码到工作区
//注释:如果有冲突,先解决冲突合并代码,然后提交
//注释:如果代码上没有冲突,但是提交的时候git提醒有冲突,那么先关闭编辑器,然后编译代码找到冲突,最后手动合并代码解决冲突
git add .
git commit -m '提交本地代码并且获取最新代码'
//注释:获取源dev分支最新代码
git pull origin dev
//注释:如有冲突就解决冲突 本地修改的代码要么提交要么隐藏后再获取,最好不要直接用reset
6. CONFLICT (content):Merge conflict in readme.txt
$ git merge feature1
Auto-merging readme.txt
CONFLICT (content):Merge conflict in readme.txt
Automatic merge failed; fix conflicts andthen commit the result.
原因:
不同分支代码合并时文件冲突造成的错误
解决:
1、git status也可以告诉我们冲突的文件;
# both modified: readme.txt #冲突文件为readme.txt
2、查看readme.txt的内容:
<<<<<<<HEADmaster
=======fenzhi
>>>>>>> feature1
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存:
master and fenzhi
3、再提交:
$ git add readme.txt
$ git commit -m "hebing"
#git branch -d #会在删除前检查merge状态(其与上游分支或者与head)。
#git branch -D #是git branch --delete --force的简写,它会直接删除。
7. The branch 'feature-vulcan' is not fully merged.
error:The branch 'feature-vulcan' is not fully merged.
If you are sure you want to delete it, run 'git branch -D feature-vulcan'.
原因:删除本地未合并分支时抛出异常
解决:
#git 在删除分支的时候可以使用git branch -d featurename 也可以是git branch -D featurename 其中是有区别的
git branch -d #的时候如果本地分支没有被合并就会提示这个问题
git branch -D #是强制删除,所以直接执行 强制删除就好了。
8. Please move or remove them before you can merge. Aborting
原因:
本地修改时与远端提交的代码冲突而又没有merge合并
解决:
#解决方法:
git clean -d -fx ""
其中
x -----删除忽略文件已经对git来说不识别的文件
d -----删除未被添加到git的路径中的文件
f -----强制运行
#注意:这样操作之后,会删除本地的修改,也就是选择与远端同步,就是你写的、修改的代码统统会被移除!所以执行之前把自己冲突的代码先备份一下,解决冲突后再还原,然后再继续pull代码,切记!!!!。
9. fatal: remote origin already exists.
原因:
本地库已经关联了远程仓库地址,且跟当前输入地址冲突时抛出此异常
解决:
$ git remote rm origin #(删除关联的origin的远程库)
$ git remote add origin git@github.com:(github名)/(git项目名).git #就不会报错了!
#如果输入$ git remote rm origin 还是报错的话,error: Could not remove config section 'remote.origin'. 我们需要修改gitconfig文件的内容找到你的git的安装路径,找到一个名为gitconfig的文件,打开它把里面的[remote "origin"]那一行删掉就好了!
10. fatal: Couldn't find remote ref master或者fatal: 'origin' does not appear to be a git repository以及fatal: Could not read from remote repository.
原因:
未找到远程仓库,或者指定名称不是个存储库
解决:
git remote add origin git@github.com:djqiang/gitdemo.git
11.warning: LF will be replaced by CRLF in qh.sh.The file will have its original line endings in your working directory
原因:
首先问题出在不同操作系统所使用的换行符是不一样的,主流操作系统的换行符有以下三种:
① Uinx/Linux采用换行符LF表示下一行(LF:LineFeed,中文意思是换行);
② Dos和Windows采用回车+换行CRLF表示下一行(CRLF:CarriageReturn LineFeed,中文意思是回车换行);
③ Mac OS采用回车CR表示下一行(CR:CarriageReturn,中文意思是回车)。
解决:
查看当前使用哪种换行符
git config core.autocrlf
# 此命令会有三个输出,“true”,“false”或者“input”
# 为true时,Git会将你add的所有文件视为文本文件,将结尾的CRLF转换为LF,而checkout时会再将文件的LF格式转为CRLF格式。
# 为false时,line endings不做任何改变,文本文件保持其原来的样子。
# 为input时,add时Git会把CRLF转换为LF,而check时仍旧为LF,所以Windows操作系统不建议设置此值。
git config --global core.autocrlf true #true的位置放你想使autocrlf成为的结果,true,false或者input
# 将core.autocrlf设为false即可解决这个问题,如果你和你的伙伴只工作于Windows平台或者Linux平台,那么没问题,不过如果是存在跨平台的现象的话,还是需要考虑一下。
# 但当 core autocrlf为true时,还有一个需要慎重的地方,当你上传一个二进制文件,Git可能会将二进制文件误以为是文本文件,从而也会修改你的二进制文件,从而产生隐患。