git常见问题

一、ssh key失效或者不存在

问题描述:

zhangxiaoding@C2D0YR2 MINGW64 /d/mini-program/mini (dev-zl)

$ git pull origin dev-zl
git@gitlab.zhidaoauto.com: Permission denied (publickey).
fatal: Could not read from remote repository.

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

问题原因:本地git bash 使用git clone git@github.com:xxx.git方式下载github代码至本地时需要依赖ssh key,遇到权限不足问题时一般都是SSH key失效或者SSH key不存在,重新创建SSH key一般就可以解决问题。

 

解决办法:

 

1、检查本地ssh key是否存在

 

    1、windows下 开始 -- 搜索框输入 git bash,打开git bash窗口;

 

    2、git base窗口中输入指令 ls ~/.ssh/ 来检查ssh key是否存在;

 

    3、如果key不存在则按照步骤二重新生成,ssh key已存在则跳过步骤二,执行步骤三;

 

2、生成ssh key

 

    1、继续步骤一的git bash窗口执行指令:

 

            ssh-keygen -t rsa -b 2048 -C "你自己的邮箱地址"

 

           修改邮箱地址为你自己的邮箱地址,注意此处邮箱地址前后的双引号为英文格式双引号;

 

    2、指令执行后页面提示:

 

           

 

           Generating public/private rsa key pair.
           Enter file in which to save the key (/c/Users/***/.ssh/id_rsa):

 

         ***表示你自己的当前登录用户名,不做修改直接回车,会将生成的rsa文件保存为默认名称

 

         再次回车提示:

 

         Enter passphrase (empty for no passphrase): 
         Enter same passphrase again: 
         提示设置提交/l拉取代码到Github时需要的密码及确认密码;

 

         设置密码后再次回车提示Your identification has been saved in.... 即表示ssh key生成成功;

 

3、添加sshkey至ssh-agent

 

    1、执行eval “$(ssh-agent -s)”确认ssh-agent处于开启状态,打印pid... 表示启用中;

 

    2、执行指令ssh-add ~/.ssh/id_rsa 添加ssh key至ssh agent,此步会要求输入步骤二设置的密码;

 

          需要注意的是此处可能报错:Could not open a connection to your authentication agent,我的解决办法是关掉当前git                  bash窗口,重新以管理员身份运行git bash 即解决问题;

 

4、添加ssh key至guthub

 

     1、登录https://github.com/,在页面右上角自己头像右边箭头处右击,弹框中进入setting功能;    

 

     2、setting界面右边菜单选择SSH and GPG keys,选择新建SSH keys,

 

 

    

 

保存即可。

 

5、git clone下载代码

 

   步骤结束,此时再尝试本地使用git clone方式下载代码即可。

 

二、Git冲突:commit your changes or stash them before you can merge. 解决办法

问题描述:

zhangxiaoding@C2D0YR2 MINGW64 /d/mini-program/mini (dev-zl)
$ git pull origin dev-zl
From http://gitlab.zhidaoauto.com/operation/h5/mini
* branch dev-zl -> FETCH_HEAD
error: Your local changes to the following files would be overwritten by merge:
config.js
Please commit your changes or stash them before you merge.
Aborting
Updating eddc4ec..03552dc

 

问题原因:

出现这个问题的原因是其他人修改了xxx.php并提交到版本库中去了,而你本地也修改了xxx.php,这时候你进行git pull操作就好出现冲突了,解决方法,在上面的提示中也说的很明确了。

 

解决办法:

1、保留本地的修改的改法

 

1)直接commit本地的修改 ----也一般不用这种方法

 

2)通过git stash  ---- 通常用这种方法

 

git stash
git pull
git stash pop

 

通过git stash将工作区恢复到上次提交的内容,同时备份本地所做的修改,之后就可以正常git pull了,git pull完成后,执行git stash pop将之前本地做的修改应用到当前工作区。

 

git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。

 

git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。

 

git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。

 

git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。

 

2、放弃本地修改的改法  ----这种方法会丢弃本地修改的代码,而且不可找回

git reset --hard
git pull

三、git回滚操作遇到“fatal: 'origin' does not appear to be a git repository”问题

1、通过git log -n显示先提交的log(n指前面第几次)
我用git log -3查看前三次提交内容

2、通过git reset --hard e377f60e28c8b84158回滚到指定的版本(其中e377f60e28c8b84158指commit hash)

3、通过git push -f origin master强制提交

此处就出现了两个问题:
fatal: ‘origin’ does not appear to be a git repository
fatal: Could not read from remote repository.

产生原因是本地分支和远程分支断开连接。

解决方法:

1、git branch
——*master 只显示master


2、然后查看是否从上游拉了
git remote –v
——若什么都没有,则和上游已断联系,拉不了代码也推不了代码


3、加关联
git remote add origin (地址)


4、git fetch origin
——会显示下拉的branch情况
格式为From ssh://gitlab.********************************
* [new branch] XXXXX ->origin/XXXXX


再次检查远程仓库,显示对应的clone地址
git remote –v
——origin git://github.com/schacon/ticgit.git (fetch)
origin git://github.com/schacon/ticgit.git (push)

5. 然后再查分支
git branch –a
——* mater
remotes/origin/XXXXXX ********


最后回到开始的第2步


回滚完毕

学会回滚才感受到了git代码管理的魅力。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值