git:常用指令
1 git版本管理软件
1.1 git和gitee
git是代码版本管理软件,用于记录代码版本的更新迭代;可用于服务器上管理linux内核代码,也可用于windows上管理sdk版本;
gitee是托管代码的平台,只支持git的格式,给个人管理自己的代码;相当于只安装了git并且存储空间超大的免费服务器;
1.2 git框架
为了便于管理代码,git将存储代码的结构分为了4个区域进行代码操作;
1.2.1 工作区:就是本地磁盘区,使用sourceinsight进行修改的单片机源码就是工作区代码;
1.2.2 暂存区:对于修改好但是又不足以直接提交仓库的代码可以先放暂存区;每次工作区提交到暂存区都会将工作区的代码完全更新到暂存区;
1.2.3 本地仓库区:在暂存区更改好当前版本需要修改的代码后,就可以提交到本地计算机上的本地仓库了;
那些没有远程仓库的人就是在本地仓库进行的版本管理;
1.2.4 远程仓库区:指公司服务器上的仓库或者gitee上给别人下载的公共仓库,方便大家一起维护代码;本质作用同本地仓库区一样;
2 使用举例
2.1 使用demo
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 常用指令
# ...
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 checkout SHA值 # 本地工作区 版本回退至本地仓库区的SHA值版本;
git checkout head # 本地工作区 版本回退至本地仓库区当前版本,***实用;
git reflog # 查看本地仓库的操作日志,可以查看到对应版本的哈希值,可以用来版本回滚;
git rm -r fie_name # 删除 本地工作区、暂存区、本地仓库区文件
git rm -r --cached . # 删除 暂存区文件
# 查看代码区别
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 reset --hard HEAD #将本地仓库区的文件同步到暂存区和工作区;HEAD就是前面的哈希值复制过来;
git reset --hard HEAD^ #将本地仓库上一次提交的文件同步到工作区;
git reset --hard a0d8dde #将本地仓库a0d8dde的提交文件同步到工作区;
#只要有sha值就可以回退到sha值版本,可以反复横跳回退,非常好用;
#远程仓库
git remote -v #查看远程仓库的信息
git remote rm origin #删除本地仓库和名为origin的远程仓库的连接
git remote add origin url #给本地仓库新建一个远程仓库的连接,远程仓库取名为origin;
#分支操作
git branch branch_name #创建分支,分支名为branch_name
git checkout branch_name #切换分支,切换到branch_name分支
#... 此处省略在分支上的操作;add commit 提交;如果不合并的话,分支就可以单独存在而不影响master了;
git checkout master #切换分支,再切换回branch_name分支
3 git终端配置
安装完git之后顺便配置掉中文支持和换行符不处理;
git本地终端右键空白处,->options ->text ->locale [zh_CN], character set [GBK];配置本地终端的显示为中文显示;
git config --global core.autocrlf false #提交时对文本文件的换行符不做转换处理;
#window下的换行符为crlf("\r\n"),unix下的换行符为lf("\n");
git config --global core.quotepath false #提交是对utf-8编码0x80后的字符不做转义处理,可防止中文注释乱码;
#以上两个配置在安装git的时候,可以选择设置,可以留意下;
4.1 git终端用户配置
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就可以知道是哪个用户提交的;
#用户名和密码在remote push的时候输入,输错了要去 "windows控制面板>>凭据" 里删除;
#这个凭据里输入的用户名和密码似乎只要第一次提交的时候输入就可以了,后面就会记住了,不需要和user.name和user.email一样,先放着,改天试试是不是;
git config user.name #查看当前用户的id
git config user.email #查看当前用户的email
git config --list #查看当前用户的配置信息
4.2 ssh密钥和https秘钥
配置ssh秘钥和https秘钥的作用有两点:
一是为了数据传输安全,如果没有秘钥就没法分辨可信赖用户,那么大家都可以往仓库提交修改,则没有数据安全性;
一是为了省去反复输入用户名和密码的过程;
在本地git config了用户名和密码之后,对于远程仓库的id,需要配置ssh或者https,用来验证本地输入的用户名和密码;
这里有一个小小问题,之前也没认真思考过,都是跟着教程改,所以没注意到,
这个本地配置的用户名和密码我想当然以为是远程仓库用户的用户名和密码,其实应该不是的,其实应该是ssh或https的用户名密码;
2024-05-07 ssh或https的用户名和密码是在git push首次提交需要输入的那个;user.name和user.email是在日志显示的用户名和密码;
两个可一样也可不一样;
【Git】 git配置多个远程仓库SSH密钥 - kudo_shini - 博客园 (cnblogs.com)
4.3 小乌龟配置
小乌龟为古早git gui应用,那么我们在配置的时候应该怎么配置呢?
首先配置好git,然后把git的ssh.exe替换掉小乌龟默认的ssh就可以实现使用git的秘钥配置了;
ssh.exe替换:设置 >> 网络 >> SSH客户端 >> D:\git\Git\usr\bin\ssh.exe
5 学习网站
LearnGitBranching https://learngitbranching.js.org/?locale=zh_CN
tryGit http://try.github.io/
Pro Git https://git-scm.com/book/en/v2