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提交代码是老要输入用户名密码` - 简书
-
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
-
http方式
避免每次提交都需要用户名密码
1.git config --global credential.helper store 2.之后push代码的时候会提示输入用户名密码,只用输入一次就行 注:该用户名密码为个人邮箱密码即可,一般使用github,gitlab注册时的邮箱,是否有权限操作代码是项目管理 者设置的
-
github创建远程空仓库
1.注册github账号创建一个空仓库
2.关联远程仓库
git remote add origin https://github.com/yyouxioayua/applestore.git
3.由于远程库是空的,我们第一次推送
master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。$ git push -u origin master
4.
git remote rm origin //删除远程仓库 git remote -v 查看关联的远程仓库信息 为什么git remote -v 看到的是两条 origin https://github.com/yyouxioayua/applestore.git (fetch) origin https://github.com/yyouxioayua/applestore.git (push) 下面链接有说明: https://blog.csdn.net/tanga842428/article/details/52909896?ops_request_misc=&request_id=&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2~all~es_rank~default-17-52909896.pc_search_all_es&utm_term=git+remote+-v%E6%98%BE%E7%A4%BAfetch%E5%92%8Cpush&spm=1018.2226.3001.4187
Git 提示fatal: remote origin already exists 错误解决办法:
Git 提示fatal: remote origin already exists 错误解决办法_Ricky-CSDN博客
错误:error: Unable to access ‘https://github.com/xxxx/xxxx.git/’:OpenSSL SSL_read:Connection was reset 解决办法:
git config --global http.sslVerify false
链接:
git clone出现 fatal: unable to access 'https://github.com/...'的解决办法(亲测有效)_Dashi_Lu的博客-CSDN博客
-
远程克隆已有仓库
1.使用http方式克隆出现错误
fatal: unable to access ‘GitHub: Where the world builds software · GitHub...‘: Encountered end of file
git config --global http.proxy git config --global --unset http.proxy
-
成功解决 fatal: unable to access ‘https://github.com/...‘: Encountered end of file_Emily_JYN的博客-CSDN博客
git clone出现 fatal: unable to access 'https://github.com/...'的解决办法(亲测有效)_Dashi_Lu的博客-CSDN博客
2.使用ssh方式
-
克隆时 要提前添加密钥才能克隆 设置该密钥对应用户主机对代码仓的操作权限
-
git常用命令
git checkout -b swe 创建并切换到分支swe
git add .
git commit -m "登录功能"
git pull origin master 远程主分支与本地当前分支合并 git pull origin master:brantest 将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。
git reset -- hard 版本号
git log 提交信息(查看当前分支)
git relog 所有提交信息
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