资源
- Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!
https://mp.weixin.qq.com/s/rfDb-Vs_0cctMs8NUTnxXg - .结合Coding的使用教程:
https://help.coding.net/docs/repo/manage/create.html
https://help.coding.net/docs/repo/git/basic.html
https://coding.net/help/docs/repo/start.html#git-commit - 45 个 Git 经典操作场景,专治不会合代码
https://mp.weixin.qq.com/s/DqSs1-pQvO6-K95cCAkpcQ - 常用的Git命令清单
https://mp.weixin.qq.com/s/ANVNo56c0FEDfvosmzMrqQ - 廖雪峰的GIT教程
https://www.liaoxuefeng.com/wiki/896043488029600 - Git菜鸟教程
https://www.runoob.com/git/git-tutorial.html - Git可视化极简易教程 — Git GUI使用方法:
https://www.runoob.com/w3cnote/git-gui-window.html - 在Windows上安装Git
https://git-scm.com/downloads.
9.bilibili视频教程:https://www.bilibili.com/video/BV1HM411377j/?p=2&spm_id_from=pageDriver&vd_source=a33854f92a711a8552143ec29bdabd6c
资源1和资源2应该写的都很好,但是还嫌长。
资源3直接写图形操作,这个多简单呀,于是决定从资源3开始看。
概念
Git是一个分布式版本控制系统,用于追踪和管理代码的变化。
所谓分布式,就是不需要中心服务器来管理文件版本。每个用户的系统上都有一个完整的仓库副本,并且可以独立地执行提交、修改、合并等操作。这意味着即使在没有网络连接的情况下,用户也能进行版本控制操作。
如果是分布式的,那么远程仓库就应该跟本地仓库是平等关系,对远程仓库的操作就是方便因为大家联网方便。
从下图可以看到,从Repository这边靠右都是本地电脑,本地电脑为每个工作区都要建立一个本地仓库。
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库
对本地仓库的操作
本地仓库主要有三个区域,工作区,暂存区和本地仓库。工作区就是能操作修改的区域,仓库区就是git管理的部分,在把文件从工作区运到仓库区之间,需要有个暂存器用来运输。
1.首先,你需要创建一个仓库,命令是“git init”,刚创建的仓库是一个空仓库,就相当你圈了一块地,规定以后东西就往这块地里放。
在你建的这个仓库的文件夹里,会有一个“.git”的文件夹,这个文件夹就是你新建的空仓库,以后仓库里所有的记录都在这个文件夹里。
2.然后你可以往你的仓库里放文件,命令是“git add 文件名”,如果是全部可以写成“git add .”。但是注意了,为了避免出错,不是你想往里放就放的,先登个记,所以这个命令并没有直接把文件放到仓库里。
我能加到“index”中,能不能后悔了,不想加了,可以使用“git rm --cached 文件名”命令。
3.文件都更改好了,需要入库了,这时候得使用“git commit -m "描述一下这次修改的内容””这个命令,对放到仓库里的东西,要做好标签,就是要描述一下。
还有一个概念是分支,一般情况下你是在主分支(master),如果你想创建一个分支,用命令“git branch new_feature”,注意创建新分支的时候不能有暂存区还没有入库的文件。如果想切换的新分支,用命令“git checkout new_feature”
查看状态
看看库里的状态用“git status”命令。该命令可以告诉你有没有没提交的文件。如果文件被更改了,但是没有加入暂存区里,该命令也有提示。
“git diff new1.txt” 可以查看new1.txt都改动了哪些地方。
“git branch”命令可以显示当前库里都有哪些分支。
“git log”用于版本日志查看。
“git reset --hard HEAD^‘版本回退,HEAD表示最新提交节点
“git reset --hard HEAD~100”版本回退前100步
“git reflog” 查看版本号
远程仓库
如果你想动用别人的仓库,有一个问题就是有可能有的人已经动用了,那大家怎么保证不被互相干扰呢。
关联远程仓库:
git remote add origin https://e.coding.net/yingruangongzuoshi/jingbangwendujiankong/HC32L130J8TA.git
把本地库推送到远程库
git push
如果远程库有别人占用,你用不了,就得先把他的库拉取下来
git pull
如果两个库文件相差较大,在使用 git pull 时可能会遇到这个错误:fatal: refusing to merge unrelated histories。
中文意思就是拒绝合并不相关的历史。
方法是先把本地文件放到暂存区里,紧接着使用 --allow-unrelated-history 选项来解决问题(该选项可以合并两个独立启动仓库的历史)。
git pull origin master --allow-unrelated-histories
紧接着将本地仓库的提交推送到远程github仓库上,使用的命令是:
git push <远程主机名> <本地分支名>:<远程分支名>
git push origin master:master
这样就可以提交成功了。
分支
分支的作用在我看来就是方便团队协作,比如我要编写一个蓝牙串口的程序,另一个编写一个激光测距的程序,我们各自编写各自的文件,公共部分文件均不改动,这样我们都编写完之后就把文件合并就可以了。
当然公共部分改动也是可以的,这就得在合并的时候手动处理冲突,还是要把冲突的文件改成一致了。
文件夹
在当前目录下新建一个库,如果再在远程库克隆,那么远程库整个作为一个文件夹存放在当前文件夹中。
安装
网址:https://www.git-scm.com/
git的文件也是存放在github上,如果上不去换个浏览器试试(我的360浏览器总是不好用)
还有一种办法就是找github的镜像。
GIT命令汇总
通用约定
在Git Bash中输入命令实际上也很方便,命令的开头都用"git",表明是git命令,然后就输入命令就可以了。
基础命令
包括克隆(clone)、初始化(init)、添加文件到暂存区(add)等。
创建仓库(git init)
选择一个文件在,鼠标右键选择“git bash”,打开命令窗口。
在当前目录下输入"git init"命令,就可以把当前目录设置为GIT仓库
git init
文件夹内会增加一个".git"文件夹用于管理版本
也可以在当前文件夹下新建一个文件夹用于存放仓库
git init 新建文件夹名称
克隆已有仓库到本地(git clone)
从远程库克隆
git clone http://
第一次登录,有弹窗,需要输入邮箱名和密码
[–mirror] : 导入镜像仓库
git clone --mirror http://
把文件增加的暂存区(git add)
git add "filename" //只添加一个文件
git add *.txt //增加所有txt后缀名的文件
git add . //增加当前目录所有文件
提交命令
用于提交暂存区到仓库区,如提交(commit)、修改最后一次提交(amend)。
提交文件(git commit)
修改好了,一次提交上去,并且要写好版本说明。
(注意:如果修改完了没有add,提交的就是前面add的内容)
(注意,这个提交也是在本地仓库中操作,还没有上传到服务器端)。
例:
git commit -m "增加了日志功能“
git config --global user.email “you@example.com”
git config --global user.name “Your Name”
分支命令
用于创建、切换、删除分支等操作,例如创建新分支(branch)、切换分支(checkout)、合并分支(merge)等。
查看信息命令
这类命令用于查看git仓库的各种状态和信息,如查看仓库当前状态(status)、查看仓库历史记录(log)、查看文件差异(diff)等。
查看GIT信息
git config --global --list
查看版本信息 git version
查看GIT版本(也可以写成git --version或者git -v)
查看提交日志 git log
git log
git log --onelin #日志信息简单显示
git log --oneline --graph --decorate --all #图形化显示
查看状态(git status)
查看暂存区的内容(git ls-files)
查看文件差异(git diff)
默认是比较工作区和暂存器的文件
git diff #比较工作区和暂存区的差异
git diff HEAD #比较工作区和版本库之间的差异
git diff --cached #暂存区和版本库之间的差异
git diff HEAD~ HEAD #当前版本和上一个版本之间的差异,~或^表示上一个版本
git diff HEAD~2 HEAD #当前版本和HEAD之前两个版本之间的差异
远程同步命令
用于与远程仓库进行交互,如推送本地分支的修改到远程仓库(push)、拉取远程仓库的修改到本地仓库(fetch)等。
推送的服务器(git push)
将代码推送到 Coding 上的远程仓库中,使用以下命令:
git push -u origin master
其中 master 是默认的分支名称,如果要推送其他分支,可以将 master 替换为相应的分支名称。-u 参数表示将本地的 master 分支与远程的 master 分支进行关联。
服务器的内容更新到本地(git pull)
直接 git pull
配置命令
用于设置Git的全局或局部的参数,例如用户名、邮箱、编辑器等。
配置用户名和邮箱
git config --global user.name "zhang fei"
git config --global user.email zhangfei@126.com
说明:
- global:表示对所有的仓库都有效,不加就表示对当前仓库有效
- 如果加–system,表示对所有用户都有效
- 用户名有空格需要用双引号,没有空格双引号可以省略
配置密码
git config --global credential.helper store
增加等待时间
git config --global --add fetch.timeout <time-in-seconds>
将 替换为您希望设置的时间(以秒为单位)。例如,要将连接超时时间设置为 60 秒,可以运行:
git config --global --add fetch.timeout 60
其他
别名(alias)
alias graph="git log --oneline --graph --decorate --all"
graph #等同命令"git log --oneline --graph --decorate --all"
git remote
添加远程库
add origin https://e.coding.net/daji/kf2022004/MCU.git
回退版本 git reset
git reset --soft 回退某个版本,并且保留工作区和暂存区所有内容
git reset --hard 回退某个版本,丢弃工作区和暂存区的所有内容
git reset --mixed 回退到某个版本,只保存工作区的内容,默认选项
后面接版本的ID号
git reset --soft 12321234 //回到指定版本
git reset --hard ^HEAD //回到上一个版本
查看操作的历史记录(git reflog)
查看记录后,可以回撤到任何版本
git checkout
git show
显示提交的内容
如果 git clone 命令因为超时而失败,您可以尝试以下方法来增加时间:
删除文件(git rm)
git rm --cache 文件名 ##删除暂存区里的文件
git rm 文件名 ##暂存区和工作区的文件同时删除
匹配规则可在官网上查看:https://git-scm.com/docs/gitignore
忽略文件(git gitignore)
有一些文件不需要上传。把这些文件名称放进gitignore文件中,就不会再上传了。
echo "*.o"->.gitignore #创建".gitignore"文件并输入“*.o”内容
从服务器文件拖拽到本地文件
从本地仓库替换服务器中的文件
要通过Git将本地文件替换服务器上的文件,您可以按照以下步骤进行操作:
本地仓库关联到远程仓库(git remote add)
1.确保您已经在本地设置了Git,并且已经将远程仓库添加到您的本地仓库。您可以使用以下命令将远程仓库添加到本地仓库:
git remote add origin <远程仓库URL>
查看远程仓库(git remote -v)
本地master分支和远程master分支关联起来
git push -u origin master:master
获取远程仓库(git pull)
获取远程仓库(git fetch)
git fetch与git pull的区别是,git fetch只获取,不合并,而git pull 需要合并,如果远程仓库与本地仓库不一致,需要手动合并。
2.在本地对文件进行修改或替换。确保您已经编辑了正确的文件,并且文件保存在您本地的Git仓库中。
3.将修改后的文件提交到本地Git仓库。使用以下命令将修改添加到暂存区:
git add <文件路径>
如果您要替换多个文件,可以使用通配符或指定多个文件路径。
- 提交您的修改。使用以下命令提交修改,并添加一条有意义的提交消息:
git commit -m "替换文件的提交消息"
5.将本地仓库的修改推送到远程仓库。使用以下命令将修改推送到远程仓库:
git push origin <分支名称>
其中,<分支名称>是您要推送修改的分支名称,通常是master或main。
- 连接到服务器,并导航到服务器上的Git仓库所在的目录。
在服务器上执行Git拉取操作,以获取远程仓库的最新修改:
git pull origin <分支名称>
这将拉取远程仓库的最新修改,并将其合并到您的本地分支。
8. 如果存在冲突,需要解决冲突。Git会在冲突的文件中标记冲突部分,您需要手动编辑这些文件,并解决冲突。然后,使用以下命令标记冲突已解决:
csharp
git add <冲突文件路径>
一旦冲突解决,使用以下命令将修改提交到服务器:
sql
git commit -m “解决冲突后的提交消息”
最后,将修改推送到远程仓库:
perl
git push origin <分支名称>
这样,您的本地文件就成功替换了服务器上的文件。请确保在执行这些操作之前,对您要替换的文件进行备份,以防万一出现意外情况。
分支相关操作
创建删除分支(git branch)
git branch #查看分支
git branch 分支名 #创建分支
git branch -d 分支名 # 删除已经合并的分支(没合并的不能删除
git branch -D 分支名 #强制删除分支
切换分支(推荐)(git switch)
git switch 分支名 #切换分支
切换分支(git checkout)
git checkout 分支名 #切换分支
合并分支(git merge)
把分支的内容合并到当前分支上,原分支保持不变
git merge 分支1 #把分支1合并到当前分支
git merge --abort #终止合并
变基 (git rebase)
把分支的内容合并到一个分支,合并的分支在当前分支的后面
常用GIT GUI工具
SourceTree 免费工具
TortoiseGit
分支管理规范
gitflow模型
GITHUB LOW模型
分支命名规范
名词解释
SSH: Secure shell的缩写,安全外壳协议。SSH Key用于加密传输中的数据。形象的说就是客户端、服务器端都先准备一份相同的密码本,发送方和接收方就可以加密和解密传输中的数据。
RSA: 公开密钥密码体质。由三个创建者名字的字母组成。