视频来源:https://www.bilibili.com/video/BV1HM411377j/?spm_id_from=333.337.search-card.all.click
本文是根据视频教程记录的学习笔记,建议结合视频教程观看
1.初始化配置
首先建立一个文件夹我这里为/d/file/GitTest,进入文件夹鼠标右键空白点击Open Git Bash Here进入命令界面
cd <文件路径> //进入指定的文件夹
cd .. //返回到当前最顶层文件夹
git -v //查看软件版本
git init //初始化一个仓库
使用git之前需要指明身份
git config --global user.name "Your Name" //名称中有空格需要用双引号括起来
git config --global user.email "you@example.com" //没有空格可以省略双引号
省略(Local):本地配置,只对本地仓库有效
--gobal:全局配置,所有仓库有效
--system:系统配置,对所有用户有效
git config --global credentail.helper store //保存用户名和密码不用每一次都输入
git config --global --list //查看配置信息
2.创建仓库
mkdir <file> //创建目录
git init //直接在本地创建一个仓库,可以init后面添加参数指明要初始化仓库的路径名称,在该目录下创建仓库(会创建.git文件)
git clone <仓库地址> //远程克隆一个仓库
ls //查看当前路径下的文件,显示不出来隐藏目录
ls -a //添加参数-a后,可以显示隐藏目录
3.工作区域和文件状态
四个区域
工作区(Working Directory):就是你能在你电脑上看见的目录
暂存区(Stage/Index):一般存放在.git目录下的index文件,所以我们把暂存区有时也叫作索引
本地仓库(Repository):工作区有一个隐藏目录.git, 这个不算工作区而是Git的版本库
远程仓库(Remote):托管在远程服务器上的仓库
三种状态
已修改(Modified):修改了文件,但没有保存到暂存区
已暂存(Staged):把修改后的文件放到暂存区
已提交(Committed):把暂存区的文件提交到本地仓库
4.添加和提交文件
git status //查看当前仓库状态
echo "内容" > <file> //创建文件file并将内容写入file,中间的>不可以少
cat <file> //查看文件的内容
git add <file> //添加文件到暂存区中
git add *.txt //添加所有以txt为后缀的文件,*为通配符
git add . //添加所有文件到暂存区中
git commit -m "提交提示信息" //提交所有暂存区中的内容,使用-m参数指定提交的信息,该信息会被记录到仓库中,如果不指定-m,该命令会进入一个交互式的界面,默认使用vim编辑提交信息
git commit "提交提示信息" //提交所有暂存区中的内容,只会提交在暂存区中的文件,不会提交工作区中的文件。进入vim编辑器,使用i键进入编辑模式,使用ESC键回到命令模式,输入:wq保存退出,即可完成提交
git commit -a -m "提交提示信息" //该一个命令可以完成暂存和提交两个动作,这里-a -m也可以省略为-am
git log //查看提交记录
git log --online //查看简洁的提交记录
5.git reset回退版本
git reset --sofe <提交ID> //回退到提交ID处的状态,保留工作区和暂存区中的内容
git reset --hard <提交ID> //回退到提交ID处的状态,不保留工作区和暂存区中的内容
git reset --mixed <提交ID> //回退到提交ID处的状态,保留工作区,不保留暂存区中的内容
6.使用git diff查看差异
git diff //查看工作区和暂存区的差异
git diff HEAD //查看工作区、暂存区和本地仓库之间的差异
git diff HEAD~ HEAD //查看上一版本和当前版本的差异
git diff HEAD^ HEAD //查看上一版本和当前版本的差异
git diff HEAD~2 HEAD //查看上两个版本和当前版本的差异
git diff HEAD~2 HEAD <file> //只比较file文件的差异
git diff --cached //比较暂存区和版本库之间的差异
git diff <版本> <版本>//两个版本之间的比较,版本为版本号
git diff <分支名> <分支名> //比较两个分支之间的差异
7.git.rm删除文件
rm <file> //删除工作区中的文件,不会删除暂存区中的内容,再进行git add file提交删除暂存区中的内容
git ls-files //查看暂存区中的文件
git rm <file> //删除工作区和暂存区中的内容
git rm --cached <file> //把文件从暂存区中删除,但保留在工作区中
git rm -r* //递归删除某个目录文件下的所有子目录和文件
删除后不要忘记提交
8..gitignore忽略文件
对于已经添加到版本库中的文件是无法进行忽略的
git默认不会将空的文件夹添加到仓库里面
vi .gitignore //修改忽略文件的内容,修改的规则如下
部分示例:
#忽略所有的.a文件
*.a
#跟踪所有的lib.a,即便你前面忽略了.a文件
!lib.a
#只忽略当前目录下的T0D0文件,不忽略子目录和根目录下的T0D0文件
/T0D0
#忽略任何文件夹下的bulid的文件夹
build/
#忽略doc/notes.txt,但不忽略doc/server/arch.txt
doc/*.txt
#忽略doc/目录及其所有子目录下的.pdf文件
doc/**/*.pdf
9.SSH配置和克隆仓库
配置ssh密钥步骤:
git clone git@github.com:allEscape/remoteRepo.git //克隆仓库,clone后面的地址来自于github上自己账号要创建的仓库的ssh
cd //返回到用户根目录
cd .ssh //进入.ssh目录,第一次的话好像是进不去的,直接下一步
ssh-keygen -t rsa -b 4096 //生成密钥,-t指定协议为rsa,-b指定生册成的大小为4096
然后输入密钥的文件名称,第一次使用这个命令直接回车就可以,会在根目录.shh目录下生成一个id_rsa密钥文件。已经配置过密钥的话,不要直接回车,新生成的密钥文件会覆盖掉原来的文件且不可逆,输入新的文件名,回车输入密码。
cd .ssh //进入.ssh目录
ls -ltr //显示,生成的文件有id_rsa和id_rsa.pub。id_rsa为私钥文件,谁也不要给,id_rsa.pub为公钥文件
vi id_rsa.pub //进入公钥文件复制
:q + <enter> //退出编辑界面
将复制的内容复制到GitHub的settings选项里的SSH and GPG keys中NEW KEYS中
配置过密钥的要添加以下代码
tail -5 config
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/test
意思是当我们访问github时指定使用ssh下的test这个密钥,这里的test为你自己设置的新的密钥文件的名称
克隆仓库到本地后cd进入仓库,然后创建文、add、commit后,再git push (推进远程仓库),刷新GitHub就会出现新添加的文件
10.关联本地仓库和远程仓库
git remote add origin <url> //关联本地和远程仓库,其中origin为别名,也可以自己指定一个shortname,url为仓库的ssh
git remote -v //查看当前仓库所对应的远程仓库的别名和地址
gti branch -M main //指定分支名称为main
git push -u origin main //-u为-upstream的缩写,完整的写法为:git push -u origin main:main,意为将本地仓库的main分支推送给远程仓库的main分支,本地和远程仓库的分支名称相同的时候可以只写一个main
git pull <远程仓库名> <远程分支名>:<本地分支名> //将远程仓库的指定分支拉取到本地在进行合并,会自动进行依次合并操作,远程仓库中的修改内容和本地仓库中的修改内容没有冲突的话合并成功,否则会因为冲突而失败
11.Gitee和GitLab
Gitee中文名码云,是国内的公有仓库托管平台,相比于GitHub访问速度较快,适用于国内
GitLab中文名极狐,支持私有化部署,可以搭建自己的服务器进行部署,适合对于代码的安全性要求较高的使用
12.GUI工具
在git官网上面有GUI的下载界面
13. 分支简介和基本操作
分支适合团队协作和开发管理
git branch //查看分支
git branch branch-name //创建分支,分支名为branch-name
git checkout branch-name //切换分支,不建议使用这个切换分支可能会存在一些问题,因为该命令除了可以切换分支和状态之外,还可以用来恢复文件或者目录到之前的某一个状态
git switch brach-name //切换分支,建议使用
git branch -d branch-name //删除已经合并的分支,分支不会自动删除需要手动删除
git branch -D branch-name //删除没有合并的分支
git merge <branch-name> //合并分支,这里的分支名为将要被合并的分支,而我们当前所在的分支就是合并后的目标分支,需要进入目标分支后执行
git log --graph --online --decorate --all //查看分支图
alias 别名="git log --graph --online --decorate --all"//给双引号里的命令起一个别名
14.解决合并冲突
在两个分支中都对同一个文件进行了修改导致了不一致,合适就会产生冲突
产生冲突后可以使用git status命令查看冲突文件列表,也可以使用git diff查看冲突的具体内容
产生冲突后需要手工编辑冲突文件,保留想要的内容,然后暂存、提交,就自动完成了合并的过程,在这之间想要终止合并可以使用下面的命令
git merge --abort //终止合并
15.rebase
除了merge可以合并分支,rebase也可以合并分支
merge的优点是不会破会原分支的提交历史,方便回溯和查看,缺点是会产生额外的提交节点,分支图比较复杂
rebase的优点是不会产生额外的提交记录,形成线性历史,比较直观和干净缺点是会改变提交历史,改变了当前分支branch out的节点,避免在共享分支中使用
git rebase branch-name //合并分支,branch-name是目标分支,当前所在目录分支为当前分支
示例:假设原来的分支节点如下图所示,在分支dev中git rebase main得到图1的结果(将当前分支变基到main上),在分支main中git rebase dev得到图2的结果(将当前分支变基到dev上)。每次执行过程是首先找到两个分支的公有节点,将当前分支变基到目标分支后,然后由目标分支和公有节点连接