1、git前置知识
1.1、git模块
这张图来源于这位大哥的博客:git代码撤销回滚只看这一篇就足够了!_git 撤销回滚_茁壮成长的凌大大的博客-CSDN博客
git划分了4个区域:
(1)working Directory:也称为工作区,是本地存放项目代码的地方
(2)Stage:暂存区,暂存区有3种状态:Untracked files(未追踪的文件,一般就是新增加的文件)、modified(修改了文件、工作区为红色,暂存区为绿色)、deleted(删除了文件)
工作区修改并未提交到暂存区
工作区修改并提交到暂存区
工作区新增了文件未添加到暂存区
工作区删除文件未添加到暂存区
(3)本地仓库
(4)Remote Directory: 指的是像github或者gitee这种远程仓库
1.2、git秘钥配置(windows)
#在git bash输入如下指令
#当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息,不然每次拉代码或者提交代码都要输入验证信息!
git config --global user.name "你的名字或昵称"
git config --global user.email "你的邮箱"
在 C:\Users\answer
#配置密钥,密钥的作用:当本地仓库中的项目上传到远程仓库(github或者gitee)的时候,实现免登录验证的方式
#默认情况下密钥是没有的,需要在git bash输入如下指令
ssh-keygen
将id_rsa.pub 文件下的所有内容(即为密钥)复制到gitee的这里:
1.3、mac终端显示当前git分支
mac、linux不像window有个git bash那么方便能显示当前处在哪个分支, 以及提交状态的颜色变化,安装插件 oh-my-zsh就能有git bash效果
(1)查看当前使用的 shell:echo $SHELL 或者 echo $0
(2)查看安装的 shell:cat /etc/shells
(3)切换为zsh: chsh -s /bin/zsh
(4)mac 上终端显示git分支插件 oh-my-zsh,并在终端terminal输入如下指令:
sh -c "$(curl -fsSL https://gitee.com/shmhlsy/oh-my-zsh-install.sh/raw/master/install.sh)"
(5)切换到含有git仓库的文件中显示如下的效果说明安装成功!
2、git常用命令
(1)常规操作命令
git add 文件名 #将工作区文件添加到暂存区
git commit -m "提交信息" #将暂存区的内容添加到存储区(本地仓库)
git push 远程分支 #将本地仓库 的内容添加到远程仓库
git pull #将远程仓库的内容更新到本地仓库
git clone 项目地址 #将远程仓库克隆到本地
(2)查看类命令
git status #查看暂存区状态
(HEAD-> xxx)代表当前分支,(origin/xxx)代表远程仓库分支
git log #查看提交到本地仓库的记录
git log --oneline #一行显示提交到本地仓库的记录
git log --graph #图形化提交到本地仓库的记录
(3)撤销类命令(用于存储区内容回退)
结论:重点看reset、checkout,restore虽然是官方推荐,但是个人感觉太繁琐了;revert是reset特定模式!
git checkout 文件 #放弃工作区修改并未提交到暂存区的内容
工作区test.txt文件(未被修改)
修改了test.txt但是未提交内容到暂存区
输入 git checkout test.txt 指令
git reset 模式 版本
模式:
--soft:保留代码修改部分,并且回到暂存区
--mixed(默认模式):保留代码修改部分,并且回到暂存区之前
--hard(慎用!):代码修改部分消失,并且回到暂存区之前
版本:
head~ 上一个版本
head~~ 上上个版本
commit版本号
test.txt原先文件
修改并提交代码到本地仓库
git reset head~ --soft:保留代码修改部分,并且回到暂存区
git reset head~ --mixed:保留代码修改部分,并且回到暂存区之前
git reset head~ --hard:代码修改部分消失,并且回到暂存区之前
git revert 版本号+1 = git reset 版本号 --hard
test.txt原先文件
修改并提交代码到本地仓库
git log --oneline 查找提交日志
我想回到 删除master 提交记录的时候,revert版本号要往前移动一位,即复制修改test前面的版本号 51692dd
git revert 51692dd
git restore --staged 文件 #撤销暂存区修改内容
已经推送到远程分支的代码记录,是无法撤销的,只能是撤销回来本地的改完再提交回去,但是无法撤销以前的提交记录。
(4)分支类命令(多人协同开发)
git branch 分支名 #创建分支
git branch -d 分支名 #删除分支
git checkout -b 分支名 #创建并切换到新分支
git checkout 分支名、git switch 分支名 #切换分支
git merge 分支名 #将目标分支名合并到当前分支
(5)缓存类命令(当前正在开发,突然遇到紧急bug修复,又不想提交代码到存储区)
git stash save "暂存备注" #将当前分支修改的内容缓 存起来
test.txt原先文件
修改了代码
遇到紧急bug需要修复,故缓存本次修改
切换别的分支处理完bug,在切换到当前分支master
git stash list #查看有多少个缓存,重点关注索引号
git stash apply 索引号 #恢复指定缓存区的内容
3、git冲突处理
3.1、冲突出现情况
(1)多人协作,多人对同一文件同一行内容进行修改
(2)远程仓库更新了,你本地仓库未同步远程仓库就直接提交记录到远程仓库
(3)git stash apply弄错分支
3.2、冲突在git中体现
远程仓库修改了test.txt
工作区提交修改到远程仓库:提示你要同步远程代码了
点击右侧蓝色按钮
冲突解决完之后要重新提交到存储区,之后在提交到远程仓库
4、vscode中git操作
4.1、安装GitLens插件
它能查看到提交历史记录等等git信息
4.2、操作介绍
vscode 提交 = git add + git commit,一步提交到存储区(本地仓库 )
工作区撤回按钮 = git checkout 文件 #放弃工作区修改并未提交到暂存区的内容
工作区+ 代表添加到暂存区
M 代表状态为 modified 修改文件,未被添加到工作区
点击修改的文件,出现文件比对,左边红色为存储区内容,右边绿色为当前修改内容
vscode 同步 = git push 远程仓库,提交到远程仓库
本地仓库撤回 = git reset 版本 --soft