git 安装 及clone push pull 各种命令报错集合,新手必读教程

git的使用

一、设置用户名邮箱

$ git config --global user.name "Your Name" (一般设置为个人名字全拼zhangshaohua或邮箱)

$ git config --global user.email "email@example.com"(可收到邮件的邮箱即可) 1、为什么要配置用户名和邮箱?

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址(名字和邮箱都不会进行验证),这样远程仓库才知道哪次提交是由谁完成的。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。

2、配置的用户名和邮箱对push代码到远程仓库有什么影响?

首先,配置的用户名和邮箱对push代码到远程仓库时的身份验证没有作用,即不用他们进行身份验证;他们仅仅会出现在远程仓库的commits里。

其次,按正常操作来说,你应该配置你的真实用户名和邮箱,这样一来在远程仓库的commits里可以看到哪个操作是你所为。

最后,这个用户名和邮箱是可以随便配置的(不提倡),如果你配置的邮箱是github里真实存在的邮箱,则commits里显示的是这个邮箱对应的账号;如果配置的邮箱是一个在github里不存在的邮箱,则commits里显示的是你配置的用户名。

二、使用http和ssh克隆代码

1.区别

clone项目:

  使用ssh方式时,需要配置ssh key,即要将生成的SSH密钥对的公钥上传至服务器;

  使用http方式时,没有要求,可以直接克隆下来。

push项目:

  使用ssh方式时,不需要验证用户名和密码,之前配置过ssh key,(如果你没设置密码)直接push即可;

  使用http方式时,需要验证用户名和密码。

在管理Git项目上,很多时候都是直接使用https url克隆到本地,当然也有有些人使用SSH url克隆到本地。这两种方式的主要区别在于:使用https url克隆对初学者来说会比较方便,复制https url然后到git Bash里面直接用clone命令克隆到本地就好了,但是每次fetch和push代码都需要输入账号和密码,这也是https方式的麻烦之处。而使用SSH url克隆却需要在克隆之前先配置和添加好SSH key,因此,如果你想要使用SSH url克隆的话,你必须是这个项目的拥有者。否则你是无法添加SSH key的,另外ssh默认是每次fetch和push代码都不需要输入账号和密码,如果你想要每次都输入账号密码才能进行fetch和push也可以另外进行设置。

注:能否push或修改代码仓是项目管理者设置的代码操作权限控制的,与使用ssh和http哪种方式无关

解决`向github提交代码是老要输入用户名密码` - 简书

  1. ssh方式配置

    步骤一:检查电脑上是否已生成SSH KEY 在git终端命令行中输入(在poweshell中无效)

    cd ~/.ssh ls

    这两个命令就是检查是否已经存在id_rsa.pub或id_dsa.pub文件,如果文件已经存在,那么你可以跳过步骤2,直接进入步骤3。

    步骤二:创建一个SSH KEY

     ssh-keygen -t rsa -C "你的email地址"   

    注:该email地址可任意(一般为gitlab,github注册的邮箱)是用来生成公钥密钥,在对应的代码托管平台上将公钥沾到key上,本身操作远程仓库每次都需要输入邮箱密码,这样以后使用ssh方式就再也不用输入了

    代码参数含义: -t指定密钥类型,默认是rsa,可以省略。 -C设置注释文字,比如邮箱。 -f指定密钥文件存储文件名。 以上命令省略了-f参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的SSH key代码,如: Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter] 当然,你也可以不输入文件名,使用默认文件名(推荐),那么就会生成id_rsa和id_rsa.pub两个秘钥文件。 接着又会提示你输入两次密码(该密码是你push文件的时候要输入的密码,而不是github管理者的密码),当然,你也可以不输入密码,直接按回车。那么push的时候就不需要输入密码,直接提交到Git服务器上了,如: Enter passphrase (empty for no passphrase): Enter same passphrase again: 接下来,就会显示如下一些提示,如: Your identification has been saved in /c/Users/you/.ssh/id_rsa. Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub. The key fingerprint is: 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db 你的email地址 当你在Git Bash上看到这段显示的时候,那就说明,你的SSH key已经创建成功,你只需要添加到Git服务器上的SSH key上就可以了。

    步骤三:

    添加SSH Key到Git服务器

    然后在终端输入:open ~/.ssh 回车即可打开对应生成的文件,如下图

    打开id_rsa.pub,复制里面的key。里面的key是一对看不懂的字符数字组合,不用管它,直接复制。

      这个由于不同的Git服务器,在界面添加的区域不一样,所以不做详述,具体参照不同Git服务器自己的操作。   经历了以上的三个步骤之后,你就可以愉快的使用SSH URL的方式来提交和克隆项目的代码了,并且不需要再频繁的输入账号密码,如果你之前已经一直使用https方式进行开发,当前想要切换成为ssh方式进行开发,只需要执行如下几步的操作即可:

    git remote rm origin git remote add origin “Git仓库的ssh格式地址” git push origin

  2. http方式

    避免每次提交都需要用户名密码

    1.git config --global credential.helper store
    2.之后push代码的时候会提示输入用户名密码,只用输入一次就行
    注:该用户名密码为个人邮箱密码即可,一般使用github,gitlab注册时的邮箱,是否有权限操作代码是项目管理
    者设置的

git命令

1.从远程克隆一个主分支master,修改后(如:新增一个1.js文件)未提交(commit)也可执行git checkout -b newbranch1,  newbranch1分支是基于修改的后的mster分支创建的,即newbranch1中也含有1.js文件,注:正常开发中不会在master上修改,通常是  克隆后新建需求分支,或者代码仓管理员在远端基于主分支新建需求分支a,我们去克隆a分支(git clone -b 分支名 仓库地址)
2.在需求分支newBr上进行需求开发,推荐使用git bash终端能看见当前所处分支,

日常开发

当完成一部分时可以git add . 将所有改动添加到缓存区,git commit -m "实现搜索功能",(提交到本地暂存区),只要commit过就可以通过git log 查看日志,就可以回退
当所有功能开发完执行git push就会将分支newBr的更改提交到远程的newBr, git push 默认只推送当前分支(newBr)到远程仓库,,  
如果newB分支是本地新建的远程当前没有这个分支即没有和远程分支关联,需要执行
git push --set-upstream origin newB 不然不知道往远程仓库哪里推,
如果需求分支newB是从远端克隆的指定分支 git clone -b newB 仓库地址      直接git push即可
注:
a:  第一次push时需要带参数 git push -u origin newBr 如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数直接使用git push
b:  git push 前必须commit否则推送将毫无意义会报 Everything up-to-date ,add .  commit 后再push,同时在push前建议执行 git pull拉取最新的仓库代码以防冲突,
c:  git pull 相当于git fetch + git merge ,  它会拉取仓库最新的代码和分支,,
  作用1:a在自己的分支q开发搜索功能过程中,同事b在自己的分支w上开发登录功能并push过,突然   某天b同事请假了领导让a优化b的登录功能,a就可以将q分支commit后执行git pull拉取最新的代码和分支,
注意:如果a在本地q分支下没有push过, 但执行git pull不加任何参数时默认会拉远端的q分支,但远端没有q分支,此时会报错  git pull <remote> <branch>,    git branch --set-upstream-to=origin/<branch> xiaohong 没有追踪关系不知道拉取远端哪个分支,执行git pull origin <remote_branch>:<local_branch> 命令的话,git pull origin q:q,依旧报错fatal: couldn't find remote ref q,因为远端没有q分支,若是想把远端已有的分支w合并到本地q可以执行git pull origin w:q
针对git pull <remote> <branch>解决方案两种   
方案一: 网上有说建立追踪关系   git branch --set-upstream-to=origin/q q    解释:将远程的q分支与本地的q,建立连接,以后在本地q分支pull和push的时候就不需要指定远程分支的名称直接进行git push和git pull 操作即可此时,但是远程没有q分支执行git pull或git push后都会报错error: the requested upstream branch 'origin/xiaohong' does not exist ,故此方案无效
方案二:让a先执行git push --set-upstream origin q,会在远程新建q分支,设置本地分支追踪远程分支,再git pull

pull之后会获取远端新的分支,但通过git branch是看不到w分支,执行git branch -a 可以看到该仓库所有分  支红色是远端的分支绿色是本地的, 然后执行git checkout w,即获取同事b开发的代码继而   优化,git checkout w 切分支前必须将当前分支的修改 进行commit 否则切不过去

只要远端有与本地当前分支有追踪关系,理论上在开发中任何时刻都可以pull,无论此时是否add, commit,但如果多人在同一分支feature开发,而你的同事在本地feature分支修改了a.vue文件并push到了远端,这时候
一、如果你在本地feature分支也修改了a.vue文件,却没有add commit ,执行git pull后会报
error: Your local changes to the following files would be overwritten by merge:
        src/xiaohong.vue

Please commit your changes or stash them before you merge.
提示我们先commit再拉取合并,如果有冲突合并后,要commit,否则会报
error: Pulling is not possible because you have unmerged files.
二、如果你在本地feature分支没有修改了a.vue文件,而是修改的其他的,修改后即使没有add, commit也可以拉取到同事修改的a.vue的最新代码,修改完在commit,

建议先commit,在pull再push

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值