因为公司目前的代码管理工具逐渐转向了git,我也学着使用起来,但是只会基本使用,并没有系统学习,感觉对其原理还是不是很懂。所以趁假期期间系统的学习一下git。这不,今天遇到遇到一个问题,我在本地连接远程github,push的时候总是要求我输入用户名和密码。主要是如果提交的频率比较高的话这样实在是太痛苦了。于是我在网上找到一种方法将原来的https的连接方式更改成为ssh连接,这样就可以使用免密提交。具体操作如下。
1.在本地找一个文件夹右键点击git bash here。
然后进入gitbash
2.访问github:https://github.com/
新建仓库:
会看到一些提示:
传输方式选择ssh。然后根据提示命令进行操作即可。
然后需要此时生产ssh 公钥与私钥。私钥留在本地,公钥放在github上。
输入 ssh-keygen 命令一路回车即可。
此时去本地路径C:\Users\zhang\.ssh可以看到一对秘钥。
回到github上开始设置。可以仅对于本项目设置公钥,则在本项目的setting设置。也可以对自己账户的所有项目进行设置,这样本账号名下的所有项目都可以免密了。
先说设置本项目:
将id_rsa.pub的内容粘贴进去,注意删掉回车,注意权限设置即可。
继续敲命令:git push -u origin master(意思是:将本地变化提交到远程的master分支)
至此已经设置完毕。下次直接push即可,便可以免密提交了。
结束。。。。
番外篇:
git init:将当前所在目录设置为git管理。会在当前目录中生成一个隐藏文件夹.git 里面可以设置当前git的一些设置,主要是config文件里面的内容需要我们注意。比如:
解释:
git branch:展示git的分支
git branch -a :展示git的所有分支,包含远程。
git checkout branchName:git切换分支
git status :查看git的当前状态
git add . :将当前所有修改从工作区提交到暂存区
git add 单个文件名:将某个文件从工作区提交到暂存区
git commit -m '提交注释':将暂存区的修改提交到对象区
git push:将对象区的修改提交到远程
git branch -d 分支名称:删除本地分支(未合并的分支不可以删除,不可以删除当前分支)
git branch -D 分支名称:强制删除本地分支
git push origin --delete 分支名称:删除远程分支
git log:查看git日志
git log --graph:图形化查看git日志
git reflog:查看git节点操作记录
git用sha1算法的字符串记录log
设置当前用户:
git config --global (基本不用,给整个计算机一次性设置)
git config --system (推荐,给当前用户一次性设置)
git config --global(给当前项目一次性设置)
设置用户名和邮箱:
例如:
git config --system user.name 'zhansan'
git config --system user.email '8888@qq.com'
git rm 文件名称:删除已经提交的文件。文件回退到暂存区。
git commit --amend -m '修正注释' :注释重写(重写最近一次的提交说明)
新增 .gitignore文件可以设置git提交的时候忽略这些文件,可以使用正则表达式。
git merge 分支名称:将某一分支的内容合并到当前分支
git branch -m master master2:分支重命名
git stash:git保存现场
1.在功能没有开发完之前,不可以commit。但是现在需要到另一个分支修改一个bug,就需要切换分支,但是没有commit之前是不可以切换分支的。这就需要用到git stash来保留现场了。
git stash list:查看暂存历史列表,用于查看现场。
git stash pop:回到最近一次的暂存历史,用于还原现场。(还原到最近一次)
git stash apply:还原内容,不删除原来保存 的内容。(可以还原到任意一次根据stash@{0})
git stash drop stash@{0}:手动删除现场
git tag 标签名:给当前状态打一个标签。
git tag:查看所有标签,不局限与单一分支。
git tag -d 标签名:删除标签
git tag -a 标签名 -m '注释'
git blame 文件名称:问责。查看该文件每一行的提交作者。
git diff:比较暂存区和工作区的差异
git diff commit:比较对象区与工作区的差异
git diff --cached HEAD(或者某一个sha1值):比较对象区与暂存区的差异