git:常用指令
1 git版本管理软件
1.1 git和gitee
git是代码版本管理软件,用于记录代码版本的更新迭代;可用于服务器上管理linux内核代码,也可用于windows上管理sdk版本;
gitee是托管代码的平台,只支持git的格式,给个人管理自己的代码;相当于只安装了git并且存储空间超大的免费服务器(远程仓库区);
git相当于sdk代码的档案库,那么git是如何实现代码的版本管理的呢?
为了让铁铁实现sdk的软件版本管理,铁铁修改了sdk后将当前版本的sdk代码提交到他的git本地仓库,
git会将当前的修改通过压缩算法存储起来并生成唯一hash值,该hash值后续可以用来将sdk代码还原到当前状态;
为了让多名铁铁实现sdk的共同软件版本管理和开发,在服务器上创建一个远程仓库,
每名铁铁通过把自己的本地仓库的修改推送到远程仓库进行合并,就实现了sdk代码的共同开发;
理解了上面的这两个需求,我们就容易理解为什么git将自己的框架分为了4个区域;
1.2 git框架
为了便于管理代码,git将存储代码的结构分为了4个区域进行代码操作;
1.2.1 工作区:就是本地磁盘区,使用sourceinsight进行修改的单片机源码就是工作区代码;
1.2.2 暂存区:可以先将工作区修改的代码提交到暂存区作为缓冲区,我几乎没咋用暂存区缓冲代码;
1.2.3 本地仓库区:将暂存区修改的代码提交到本地仓库区后,git会生成唯一hash值,用来后续还原代码到当前版本;
1.2.4 远程仓库区:指公司服务器上的仓库或者gitee上给别人下载的公共仓库,方便代码的维护和追溯;
2 使用举例
2.1 代码提交到仓库
2.1.1 远程仓库为空时,如何提交本地仓库到远程仓库
#1 gitee:新建远程仓库 #2 本地工作区:first commit git init # .git版本管理,包含了HEAD,index,版本管理的所有信息和配置; #...coding ... # 本地工作区 coding... git add . # 本地工作区 >>> 暂存区 git commit -m ".." # 暂存区 >>> 本地仓库区 git remote add origin url # connect 本地仓库区 to 远程仓库 # 给远程仓库标识为origin;默认都使用origin来命令远程仓库; git push -u origin master # 本地仓库区 >>> 远程仓库区origin master #3 本地工作区:continue commit #...coding ... # 本地工作区 coding... git add . git commit -m "注释" # "注释"是必须的,如果没有注释怎么来区分不同版本呢? git push # 本地仓库区 >>> 远程仓库区
2.1.2 远程仓库非空时,如何提交本地仓库到远程仓库
git pull origin master --allow-unrelated-histories # 远程仓库区 >>> 本地工作区 && 暂存区 # --allow-unrelated-histories # 允许不同提交历史的分支强制合并,允许远程仓库和本地仓库没有关联性; git add . # 本地工作区 >>> 暂存区 git commit -m "注释" # 暂存区 >>> 本地仓库区 git push # 本地仓库区 >>> 远程仓库区 git push --force origin master # 远程仓库与本地仓库有冲突时,对其进行强制提交,改天试试;
3 常用指令
#1 如何创建和切换分支 git branch branch_name #创建分支,分支名为branch_name git checkout branch_name #切换分支,切换到branch_name分支 #... 此处省略在分支上的操作;add commit 提交;如果不合并的话,分支就可以单独存在而不影响master了; git checkout master #切换分支,再切换回branch_name分支 #2 如何修改仓库的远程仓库 git remote -v #查看远程仓库的信息 git remote rm origin #删除本地仓库和名为origin的远程仓库的连接 git remote add origin url #给本地仓库新建一个远程仓库的连接,远程仓库取名为origin; #3 如何进行本地仓库的版本回退 git reset --hard HEAD #将本地仓库区的文件同步到暂存区和工作区;HEAD就是前面的哈希值复制过来; git reset --hard HEAD^ #将本地仓库上一次提交的文件同步到工作区; git reset --hard hash #将本地仓库hash值的提交文件同步到工作区; #只要有hash值就可以回退到hash值版本,可以反复横跳回退,非常好用; git reset --soft HEAD #将本地仓库指向HEAD提交,工作区和暂存区保留不变,然后再git commit可用于将多个提交合并为一个提交; git restore --staged . #将暂存区的文件恢复到HEAD指针状态;这样的话,就可以把整个.git文件拷贝走作为一个新仓库; git reset --mixed HEAD #将本地仓库和暂存区都指向HEAD版本,保留工作区不变;
# 下载和推送指令 git clone url #从url所在远程仓库下载代码到本地工作区,默认自动将远程仓库设置标识名为origin git clone --recursive url # 远程仓库区 >>> 本地仓库区;可以递归下载子目录文档; git pull origin master #将远程仓库拉到暂存区和本地工作区,远程仓库和本地仓库需要是相关的分支; git pull origin master --allow-unrelated-histories #将远程仓库拉到暂存区和本地工作区,允许远程仓库和本地仓库没有关联性; git push -u origin master #将本地仓库提交到远程仓库;-u表示upstream,将远程仓库设置为本地仓库的上游,之后再push,pull就不用配置远程仓库是哪个了; #默认远程分支都叫origin,-u origin表示指定("指定"划重点)上传到远程分支origin;之后再上传,就可以省略origin了 #默认本地分支都叫master;如果本地只有master分支,之后push也可以省略master了; # 查看日志指令 clear # 清空cmd窗口指令 git log --graph # 查看本地仓库的提交日志 git reflog # 查看本地仓库("本地仓库"划重点)的操作日志; 可以查看到对应版本的哈希值,可以用来版本回滚;
# 查看代码区别 >> 查看代码区别可以使用小乌龟查看,在win上操作的话这些指令没啥用; git status #查看工作区和暂存区的文件状态 git diff #比较工作区和暂存区的代码,看的是文件内容区别,下面几排都是; git diff head #比较工作区与本地仓库head的代码 git diff head^ #比较工作区与本地仓库上一次提交的代码 git diff head^^ #比较工作区与本地仓库上上次提交的内容 git diff --cached #比较暂存区与本地仓库的内容 git diff --cached head^ #比较暂存区与本地仓库上一次提交的内容 git diff --cached head^^ #比较暂存区与本地仓库上上次提交的内容 git rm -r fie_name # 删除 本地工作区、暂存区、本地仓库区文件 git rm -r --cached . # 删除 暂存区文件
4 git终端配置
4.1 如何修改默认换行符处理
git config --global core.autocrlf false #提交时对文本文件的换行符不做转换处理; #window下的换行符为crlf("\r\n"),unix下的换行符为lf("\n"); git config --global core.quotepath false #提交是对utf-8编码0x80后的字符不做转义处理,可防止中文注释乱码; #以上两个配置在安装git的时候,可以选择设置,可以留意下; #git本地终端右键空白处>>options>>text>>locale [zh_CN], character set [GBK];>>配置本地终端的显示为中文显示;(这个好像没起效)
4.2 如何配置用户名和邮箱
git config --global --unset user.name #换电脑后,清除用户的id; git config --global --unset user.email #换电脑后,清除用户的email; git config --global user.name "caesura_k" #提交用户的id; git config --global user.email "caesura_k@163.com" #提交用户的email;如果注册用户绑定了邮箱,那么gitee就可以知道是哪个用户提交的; git config user.name #查看当前用户的id git config user.email #查看当前用户的email git config --list #查看当前用户的配置信息 #远程仓库的用户名和密码在remote push的时候输入,只会要求输入一次,输错了要去 "windows控制面板>>凭据" 里删除; #这个凭据里输入的用户名和密码和user.name和user.email是相互独立的,只是可以设置成一样;
4.3 ssh密钥和https秘钥
ssh秘钥就是将用户名和密码合并成一个加密的一次性随机值,配置ssh秘钥之后就不用反复输入用户名和密码了,适用于gitee,github;
https秘钥就是git push首次提交时会要求输入的用户邮箱和密码,https秘钥也只需要输入一次,适用于用户少的公司服务器;
4.4 小乌龟ssh替换
小乌龟为古早git gui应用,直接下载安装之后,git的ssh.exe替换掉小乌龟默认的xx.exe就可以使用了;
ssh.exe替换:设置 >> 网络 >> SSH客户端 >> D:\git\Git\usr\bin\ssh.exe;
这么说的话那我不替换ssh,直接使用小乌龟自己的ssh是不是也行呢?没试过,先放着;
5 小乌龟用法
5.1 如何创建分支并切换到该分支
左上角单击'master'>> 右键'heads' >> 'CreateBranch'>>填写名称,选择基于那个hash值创建分支>>右键创建的branch>>switch/checkout to this;
5.2 如何将分支合并到matser分支
首先需要回到master分支 >> 然后右键要合并的分支 >> merge to 'master' >> 合并完成后会提示旧的分支删不删,直接删了也行;
6 学习网站
LearnGitBranching https://learngitbranching.js.org/?locale=zh_CN
tryGit http://try.github.io/
Pro Git https://git-scm.com/book/en/v2
git 图解本地工作区·缓存区·本地仓库·远程仓库_.git目录本地库和工作区_Hayley-L的博客-CSDN博客
7 小结
git GUI好用,不要再费劲巴拉打命令行了;
版本回退还是命名行好用,看来各有优劣;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?