git高频率操作指导
git简介
git是著名分布式控制系统,没有所谓的“中央服务器”托管代码,每个PC都保存了一份完整的代码,各个PC如果做了修改,会进行相互推送修改的代码部分;服务器只需要部署git这个应用程序即可,而完成代码相互推送需要进行配置,通常来说有HTTP和ssh两种方式,下面就记录这两种方式
HTTP方式推送代码
使用HTTP方式,交互过程数据不会进行加密的;
一般使用步骤
- 在git服务端申请HTTP账号,例如申请的账号和密码分别是:jackzhous passwd
- 本地客户端配置;如果不进行配置的话在你使用git clone命令时会提示你输入上诉的用户名和密码,这样会太繁琐,下面是我的配置
在本地你要拉下项目来的位置
git init //git生成相关的配置环境
cd .git //切换到期环境目录
vim config //这个config就是需要配置的文件
git config user.name "username"
git config user.email "passwd"
配置好后,查看配置文件如下:
小结
一般只需要配置user即可,这样以后git clone拉取文件就可;这里是针对局部配置,如果切到另外一个路径则需要重新配置;如果需要一次性搞定配置,在所有路径下都可以Git clone代码的话,则使用以下配置:
git config --gloabl user.name "username"
git config --gloabl user.email "passwd"
经过上诉配置后,会保存在你的~/.gitconfig里面的;每次进行git clone项目时会读取该配置文件使用其中user信息;
如果配置多个账户如何配置呢?
经常会有这种需求的,比如你个人平时的代码在github上的,而公司又专门又有一个gitlab, 这时候可以公司用全局配置,个人用局部配置,两者不冲突
SSH方式推送代码
ssh方式采用加密方式推送同步代码,其加密算法使用不对称加密算法,先生成一对公私钥,ssh客户端保存私钥,ssh服务端保存公钥;
- 本地生成公私钥
ssh-keygen -t RSA -C "xx.email" //后面出现提示输入内容直接回车即可
此时,公私钥会保存在~/.ssh路径下,分别是id_rsa和id_rsa.pub
2. 将file.pub的内容拷贝到git服务端保存,以github为例,如下图:
- 此时,git去可克隆项目即可
同上,多个git账号如何配置?
- 生成公私钥
ssh-keygen -t RSA -C "xx.email" -f file //名字不要和上一个相同,不然会覆盖上一个配置文件
此时,公私钥会保存在~/.ssh路径下,分别是file和file.pub
2.同上配置,拷贝公钥到服务器上即可
3.默认情况下,~/.ssh目录下没有配置文件,需要你自己创建一个config,配置内容如下:
## github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
# company github http://117.174.122.33/
Host 172.16.3.21
HostName 172.16.3.21
Port 80
PreferredAuthentications publickey
IdentityFile ~/.ssh/file
上面配置好后,当你使用git去clone项目时会跟进clone的地址自动进入相应的配置,从而去拉取项目
测试是否配置正确
ssh -T -v git@你的服务器IP或域名
连接成功,则会有successful的提示;
博主这一步遇到了这个问题,测试发现返回这样的结果:
OpenSSH_7.5p1, LibreSSL 2.5.4
debug1: Reading configuration data /Users/sever1/.ssh/config
debug1: /Users/sever1/.ssh/config line 9: Applying options for 172.16.3.21
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 52: Applying options for *
debug1: Connecting to 172.16.3.21 [172.16.3.21] port 80.
debug1: Connection established.
debug1: identity file /Users/sever1/.ssh/zywlw type 1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/sever1/.ssh/zywlw-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.5
debug1: ssh_exchange_identification: HTTP/1.1 400 Bad Request
debug1: ssh_exchange_identification: Server: nginx
debug1: ssh_exchange_identification: Date: Wed, 25 Jul 2018 21:51:06 GMT
debug1: ssh_exchange_identification: Content-Type: text/html
debug1: ssh_exchange_identification: Content-Length: 166
debug1: ssh_exchange_identification: Connection: close
debug1: ssh_exchange_identification:
debug1: ssh_exchange_identification: <html>
debug1: ssh_exchange_identification: <head><title>400 Bad Request</title></head>
debug1: ssh_exchange_identification: <body bgcolor="white">
debug1: ssh_exchange_identification: <center><h1>400 Bad Request</h1></center>
debug1: ssh_exchange_identification: <hr><center>nginx</center>
debug1: ssh_exchange_identification: </body>
debug1: ssh_exchange_identification: </html>
ssh_exchange_identification: Connection closed by remote host
看最后一步,这是被远端所关闭,有可能被服务器禁了,需要你去找后台人员确认解决
git分支使用
创建远程分支并切换
git checkout -b branch_name
拉取远程分支到本地分支
git checkout -b local_branch origin/remote_branch
git fetch
回滚本地代码到某个历史版本
git checkout 940ebaca9b8d10f2ca4a076b8b1a8c1dc3ae2dd2 //历史版本号
提交到分支
git push origin remote_branch //提交道远程分支
以上所有的操作都必须先要clone项目的mater后方可操作
查看所有分支
git branch -a
删除远程分支
git push origin --delete remote_branch
删除本地分支
git branch -d local_branch
基于某分支创建新分支
git checkout -b your_new_branch origin/old_branch
拉取某个远程分支到本地
已克隆其他分支情况
本地必须先创建好分支,不然会覆盖本地当前分支
git pull origin remote_branch
直接clone远端分支
git clone -b remote_branch address
打标签tag
//对某个历史版本打上标签
git tag -a tag_name 版本commit数字 -m "标签说明"
//推送标签到远端
git push origin tag_name
//删除本地标签
git tag -d tag_name
//将本次删除推送到远端
git push origin :refs/tags/tag_name
查看远端最新的提交记录
git查看记录是用git log来查看,但是它只是查看本地分支最新的提交记录,无法查看远端仓卡分支最新的记录;如何查看就是用:
git log origin/远端分支名称
git如何强制拉取远程项目覆盖本地项目?
只需两个步骤:
- 拉取远程仓库所有分支代码,但不合并
git fetch --all
如果不加–all默认就会拉取当前分支的代码到本地
- 将拉取下来某个分支的代码强制覆盖到本地
git reset --hard origin/远端分支名
git设置本地分支追踪远端某分支
查看当前本地分支关联的远端分支
git branch -vv
本地分支关联远端分支
git branch --set-upstream-to=<远程主机名>/<远程分支名> <本地分支名>
例如:
git branch --setupstream-to=origin/remote_ba local_ba