git
分布式版本控制系统
![](https://i-blog.csdnimg.cn/direct/fe6901be79eb464b8d32574a5421ddb5.png)
拉取的远程仓库代码的地址
![](https://i-blog.csdnimg.cn/direct/2056b12f6ea0490b8e9b963d9e9506c7.png)
![](https://i-blog.csdnimg.cn/direct/83f791c9c22d4c0e8ce5fc6850784a4c.png)
![](https://i-blog.csdnimg.cn/direct/157e648cd0024a238232bc4ff99841b2.png)
github中配置
![](https://i-blog.csdnimg.cn/direct/fdb34b52229e4a6488a565bd123a0d3c.png)
![](https://i-blog.csdnimg.cn/direct/4bb1cbebd73d4a7abb15ae9e123e2b2d.png)
常用git命令
克隆一份到本地
![](https://i-blog.csdnimg.cn/direct/1d93abd5ecaf40448da3cbefe0db3bb2.png)
进入项目后,可以使用
git log
查看当前分支 及修改提交记录
![](https://i-blog.csdnimg.cn/direct/97e95a565e8e4d4ea616202ffe963146.png)
远程的仓库名称 自动创建
git remote (origin)
![](https://i-blog.csdnimg.cn/direct/38a22f58db5643559de843621200b946.png)
可以更改
![](https://i-blog.csdnimg.cn/direct/66cedcc5601c44a792f37f7974f5fa2c.png)
本地仓库 自动生成一个默认的主干分支 master=>origin/master 代码版本
![](https://i-blog.csdnimg.cn/direct/a7014f787d5e4f699da8a8d5d56d2215.png)
![](https://i-blog.csdnimg.cn/direct/0cc618ff25904ef295bf65ae6b9fd5a4.png)
本地仓库的代码目录即git的工作区
![](https://i-blog.csdnimg.cn/direct/532c250a897b44d28344d33f5bcbdd8c.png)
把工作区的代码改动,提交到暂存区当中
git add .
添加所有修改 git add main.cpp 添加指定文件
![](https://i-blog.csdnimg.cn/direct/617968aadc4f41458e14643176218c52.png)
将暂存区的代码提交到本地仓库的代码分支上 此时是master分支 故提交到本地的master分支上
git commit -m "对当前修改的说明"
![](https://i-blog.csdnimg.cn/direct/ee1376eb632541e8bc82d3cbc4bfb00c.png)
![](https://i-blog.csdnimg.cn/direct/de62834acefe43768f4d58b8af88e16b.png)
把本地仓库的代码 推送到远程仓库中 哪个仓库?origin
git push origin master
把本地仓库master的分支代码推送到远程仓库origin的master分支上
![](https://i-blog.csdnimg.cn/direct/f2e947d09dc04f3a9122edb5a4deefd9.png)
git branch
查看正在哪个分支上面工作
当前工作的 前面会有*
![](https://i-blog.csdnimg.cn/direct/5f6cf79adf96494c95b4aed8f9ef18ba.png)
![](https://i-blog.csdnimg.cn/direct/8a127e2e178c4420aa49b5d57b68f62c.png)
![](https://i-blog.csdnimg.cn/direct/d98de9260e2249d0b459343f3f01c717.png)
idea与git
在idea下用自带的vcs来完成git相关的操作
1、github创建一个新项目
关联远程分支
2、跟远程仓库进行关联
本地项目还未接入版本控制系统 创建git仓库
![](https://i-blog.csdnimg.cn/direct/aa9fc2bd02b64554823156f68badaa37.png)
管理远程
![](https://i-blog.csdnimg.cn/direct/cf497085ebc24a3ca599a68690fdf206.png)
![](https://i-blog.csdnimg.cn/direct/c7fc7fdb85ed42c299fd7b022cc28de6.png)
对项目进行判断 哪些文件是无需进行版本管理
![](https://i-blog.csdnimg.cn/direct/a8fcf3a6841e42889712068cb59947fd.png)
.mvn文件没有什么用 可以点击添加到.gitignore里面 不会进入版本管理
![](https://i-blog.csdnimg.cn/direct/7dada7cfeb63459ab78951bebc505866.png)
初始化
![](https://i-blog.csdnimg.cn/direct/602298f2897047c1940ef9c766fa2e72.png)
![](https://i-blog.csdnimg.cn/direct/59bf2e31dada40d9b402534437fe5053.png)
定义用户名称
![](https://i-blog.csdnimg.cn/direct/09162c2ae2ca44dfa4492146f64dc8e9.png)
创建分支
在我们做开发时候 一般不会在master上面做开发
master这个分支一般是用来接收别的分支合并过来的内容
右下角新建一个branch分支
![](https://i-blog.csdnimg.cn/direct/2754c5f49e5246849886e00e45052d65.png)
提交的时候这个新建的分支 也会在远程的一个仓库里新建一个分支 往上推送
![](https://i-blog.csdnimg.cn/direct/618be438b29d40568be94c11ddf9dac6.png)
如何解决冲突
基不同 推送被拒绝了
git rebase 变基
![](https://i-blog.csdnimg.cn/direct/ed38f8bdd2c64e079fd8f7e795c2ca76.png)
rebase后是一条直线
git merge
提交的记录并不会合并到一条直线上面去 而是一条曲线 有一个merge节点在此合并了
![](https://i-blog.csdnimg.cn/direct/38f0eb0430834a7eb0a2074b90f9d657.png)
![](https://i-blog.csdnimg.cn/direct/37afcbabfe78436482fadf590d4317b3.png)
![](https://i-blog.csdnimg.cn/direct/d485208e942b402e86e66c6bbcbc8b82.png)
![](https://i-blog.csdnimg.cn/direct/f4e4f8daa8354f74b23575139c554dee.png)
cherry pick
防止代码污染或者从废弃的分支当中挑选一些提交的内容
下图可以发现test01是feature01上一个特有的提交内容 feature02上没有test01
![](https://i-blog.csdnimg.cn/direct/24d724ad03b848a4a19a6a3004ae0b41.png)
利用cherry pick 产生一个新的提交记录 从别的分支把想要的内容合到现在的分支上面来
![](https://i-blog.csdnimg.cn/direct/f7419359200f4f769390aac76fc60494.png)
patch
防止污染代码,先不给git push的权限,在本地先写好代码,打一个patch包,给有权限的人提交
![](https://i-blog.csdnimg.cn/direct/5a4dae8ccf404818991b0b49f303719a.png)
本地写了代码发现没用-》回滚
![](https://i-blog.csdnimg.cn/direct/13fcebdebed943cdb300aa5d7f0e4407.png)
选择刚刚的patch文件导入
![](https://i-blog.csdnimg.cn/direct/8dcb5c6ea6c445fa8b349cee11fecd9d.png)
pull request
如果写好代码不直接merge,而是要让reviewer进行review一遍再merge
![](https://i-blog.csdnimg.cn/direct/2aa2aaf8c2bc4329b764802fe908fd6a.png)
邀请进行review代码
![](https://i-blog.csdnimg.cn/direct/26a30e627c4746628e797027c39b7cd6.png)
git回滚与强推
![](https://i-blog.csdnimg.cn/direct/5620b4f70b3f4a58bc002a055ba0ea98.png)
找回代码 右键local history -> revert以下即可
vscode 与 git
如何查看是一个git的工程 在终端可看到
如果没有 用 git status
增加一个文件 文件名为绿色 产生U符号->untracked 表示没有被git跟踪的文件
修改的文件 变黄 产生M符号->modify 表示修改的文件
删除文件
git管理的界面
![](https://i-blog.csdnimg.cn/direct/f2b9a1ed83d2466f9aac64d9c31c20cc.png)
点击加号 文件被添加到Staged Changes 相当于在命令行执行git add操作 add之后被添加到暂存区
都添加后 Changes下面没有东西了 都在暂存区
右边可修改 左边只读
![](https://i-blog.csdnimg.cn/direct/f31d81817ac14fce99501ac4942b2f51.png)
![](https://i-blog.csdnimg.cn/direct/4c76984c55ca477d9c6ba64bda03ec61.png)
添加提交的message
git已提交
以下是顺手学的
ssh远程登录
![](https://i-blog.csdnimg.cn/direct/80d95a1134a8487cbfe5d02812876ddc.png)
基础知识
ssh是一种加密的网络通信协议
![](https://i-blog.csdnimg.cn/direct/d09b6acd23c24ad889282242862674c7.png)
服务器客户端模式 c/s 默认端口号22
![](https://i-blog.csdnimg.cn/direct/87373ab06cbf44abb2b5e347739c6ba6.png)
![](https://i-blog.csdnimg.cn/direct/aaa4b7e6801d441eb2417e31b51ec7df.png)
需要保证处在同一个局域网下面
![](https://i-blog.csdnimg.cn/direct/fad028f9f16743aa9bccc96207afe282.png)
免密登录
(无需使用密码)
别名登录
在客户端操作 即当前的电脑
![](https://i-blog.csdnimg.cn/direct/5c7f16a425e74437a3853c13266541b3.png)
![](https://i-blog.csdnimg.cn/direct/e4798e8d8c8f4866b353510c859cf94c.png)
![](https://i-blog.csdnimg.cn/direct/2b24887475bc42bb8771557b745168ac.png)
免密登录
客户端keygen生成一个公钥一个私钥
通过ssh-copy-id的命令 把客户端机器上公钥的内容 复制到服务器的某目录下的文件如下
服务器可以接受多个客户端连接 可以配置多个
![](https://i-blog.csdnimg.cn/direct/2e2a49bba9f84c81b7d934c6b76ac374.png)
![](https://i-blog.csdnimg.cn/direct/5e6a760783424dacba26feba5c9f7f0f.png)
![](https://i-blog.csdnimg.cn/direct/75c669cf4ef24edcaa88f0f8f42866ce.png)
查看文件,无公钥私钥文件,公私钥文件开头是id
![](https://i-blog.csdnimg.cn/direct/b52c6698c8dc4204bcc60c05cb9dd5f2.png)
![](https://i-blog.csdnimg.cn/direct/96b49329fd98434e8100201ea06a8a95.png)
即成功
![](https://i-blog.csdnimg.cn/direct/628c82f748a9493fb10228a65853105c.png)
实际应用
scp命令行文件传输
传输大文件
传整个目录
![](https://i-blog.csdnimg.cn/direct/ade26218db2644b8a52873a7e9c1de28.png)
![](https://i-blog.csdnimg.cn/direct/c93ed216cab5418da251dc85e84beb3f.png)
可以可视化传输 Xshell XFTP
VSCode远程开发
下载插件remote ssh
点击
![](https://i-blog.csdnimg.cn/direct/fd101b01244440969d54e310dc420112.png)
config文件的两个别名显示 点击即可连接服务器
![](https://i-blog.csdnimg.cn/direct/969f3d8e3d61498faf14a5dca65fa8a6.png)
打开了一个新的vs页面 左下角有变化
![](https://i-blog.csdnimg.cn/direct/e566653895aa438fa0bf6855829b2aa6.png)
直接用当前页面连接
![](https://i-blog.csdnimg.cn/direct/cdf636b2e3b046c2bb363ff08dab3d78.png)
关闭在file中
![](https://i-blog.csdnimg.cn/direct/96c0b98197a94596b3aa75a24797475b.png)
github免密push pull
![](https://i-blog.csdnimg.cn/direct/0da1a998ff704ababa9905a350ad1084.png)
![](https://i-blog.csdnimg.cn/direct/ba000f30c2fd48eb86e505203dfaa2cd.png)
![](https://i-blog.csdnimg.cn/direct/1267083eae9d40f8a6b16176369c7394.png)
git push后需要输入用户名 和密码 非常繁琐!!
获取公钥之后 在github仓库的setting里
![](https://i-blog.csdnimg.cn/direct/b124aa3af12a4cde9a8d0d3d14d95d9c.png)
![](https://i-blog.csdnimg.cn/direct/19d9020d639749818aa9f5940939145a.png)
即成功 无需输入密码 https和ssh差不多