git 基础
1. 起始配置
# 配置自己的姓名
git config --global user.name "Your Name"
# 配置自己的邮箱
git config --global user.email "email@example.com"
注意
1.命令之间有空格
2.上面的两个命令只需要运行一次即可, 如果输入错误, 重新运行命令即可
3.可以使用 git config -l 命令来查看配置信息窗口高度不够,会出现滚动窗口,此时使用 q 字母退出配置查看窗口) quit 的缩写
4.这个命令以后不用自己手敲, 直接复制修改『名字』与『邮箱』即可
5.命令的运行不受位置的影响
2. 新建仓库
方法一:
// 先创建一个空目录,然后进入,对空目录进行初始化
git init
// 空目录就变成了仓库
方法二:
git init my_git
// 在当前目录下创建仓库 my_git, 创建好的仓库中, ls -a 可以查看到 .git文件,就表示仓库创建成功
方法三:
// 远程克隆仓库
git clone 仓库网址
仓库本质上还是一个目录, 删除仓库和删除目录方法一样
rm -rf <name>
3. 工作区域和文件状态
Git 的本地数据管理分为三个区域: 工作区 暂存区 本地仓库
工作区相当于车间, 进行生产, 然后 使用 g i t a d d git \ \ add git add 将生产完的产品装车, 送入暂存区, 最后 g i t c o m m i t − m " 文本 " git \ \ commit \ \ -m \ \ "文本" git commit −m "文本" , 将产品送到本地仓库
直接使用 g i t c o m m i t git \ \ commit git commit 会进入 vim 编辑文本
g i t c o m m i t − a m " 文本 " git \ \ commit \ \ -am \ \ "文本" git commit −am "文本" , 同时完成添加至暂存区和提交至本地仓库的两个操作
g i t s t a t u s git \ \ status git status 查看仓库状态
g i t l o g git \ \ log git log 查看仓库提交历史记录
g i t l o g − − o n e l i n e git \ \ log \ \ --oneline git log −−oneline 版本哈希之只显示前 7 位
g i t l s − f i l e s git \ \ ls-files git ls−files 查看暂存区内容
4. git reset 回退版本
g i t r e s e t − − s o f t git \ \ reset \ \ --soft git reset −−soft + 版本id, 用 git log --oneline 查询, 回退到某一个版本, 并且保存工作区和暂存区的所有修改内容
g i t r e s e t − − h a r d git \ \ reset \ \ --hard git reset −−hard 丢弃工作区和暂存区的所有修改内容
g i t r e s e t − − m i x e d git \ \ reset \ \ --mixed git reset −−mixed 只保留工作区的修改内容, 丢弃暂存区的修改内容
g i t r e s e t H E A D git \ \ reset \ \ HEAD git reset HEAD^ 以 mixed 形式回到上一个版本
g i t r e f l o g git \ \ reflog git reflog 查看操作历史记录, 可以找到误操作之前的版本号; 如果不小心 git reset --hard 删掉了当前的工作区, 用 git reset --hard 回到误操作之前的版本即可
5. git diff 查看差异
g i t d i f f git \ \ diff git diff 查看工作区与暂存区的差异(不显示新增文件)
g i t d i f f − − c a c h e d git \ \ diff \ \ --cached git diff −−cached 查看暂存区与本地仓库的差异
g i t d i f f H E A D git \ \ diff \ \ HEAD git diff HEAD 查看工作区与本地仓库的差异
g i t d i f f I D 1 I D 2 git \ \ diff \ \ ID_1 \ \ ID_2 git diff ID1 ID2 比较两个版本之间的差异, git log --oneline 查看前 7 位 版本号的哈希值即可
HEAD 指向分支的最新提交节点
HEAD~ 和 HEAD^ 都可以表示前一个版本, HEAD~2 可以表示 HEAD 之前的第 2 个版本
g i t d i f f H E A D git \ \ diff \ \ HEAD git diff HEAD ~ 2 H E A D f i l e 3. t x t 2 \ \ HEAD \ \ file3.txt 2 HEAD file3.txt 只查看这两个版本之间 file3.txt 的差异
git diff <branch_name> <branch_name> 比较分支之间的差异
6. git rm 删除文件
rm 删除文件只能删除掉个工作区的文件, 然后还要 git add . , 更新暂存区
g i t r m < f i l e − n a m e > git \ \ rm <file-name> git rm<file−name> , 可以直接在工作区和暂存区删除文件
g i t r m − − c a c h e d < f i l e > git \ \ rm \ \ --cached \ \ <file> git rm −−cached <file>, 把文件从暂存区删除, 但保留在当前工作区中
g i t r m − r ∗ git \ \ rm \ \ -r \ \ * git rm −r ∗ , 递归删除某个目录下的所有子目录和文件
最后提交即可
7. .gitignore 忽略文件
作用: 忽略掉一些不应该被加入到版本库中的文件, 例如日志文件和文件夹, .class文件, .0文件, .env文件. .zip和tar文件. .pem文件
系统或软件自动生成的文件
编译产生的中间文件和结果文件
运行时生成的日志文件, 缓存文件, 临时文件
涉及身份, 密码. 口令, 秘钥等敏感信息文件
e c h o ∗ . l o g > . g i t i g n o r e echo \ \ *.log > \ \ .gitignore echo ∗.log> .gitignore, 使用通配符, 忽略所有的 log 日志
匹配规则
8. SSH配置和克隆仓库
// 在用户根目录下
cd .ssh
// 然后使用生成密钥指令
ssh-keygen -t rsa -b 4096
// 按下回车后会提醒输入密钥的文件名称, 如果是第一次操作, 可以直接回车
// 这个命令会在用户根目录的.ssh目录下生成一个id_rsa的密钥文件
// 如果已经配置过ssh密钥了, 就输入一个新的文件名, 然后回车, 防止覆盖掉之前的
执行完会生成两个新文件, id_rsa 是私钥文件, id_rsa.pub 是公钥文件
// 打开公钥, 并复制所有内容
vi id_rsa.pub
// 打开github里的设置,选择SSH and GPG keys, 点击New SSH key
// 把公钥内容复制到里边, 起一个标题
// 按上述流程做完就完成SSH密钥的配置了
// 如果指定了新的文件名,例如 test, 还需要增加一步配置
// 创建一个新的config文件, 并添加以下5行设置
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/test
在github中创建一个新仓库, 就可以git clone下来了
注意, 使用时不要连接公共网络, 例如校园网, 可能出现 ssh: connect to host github.com port 22: Connection refused 错误, 或者路由器禁用了 SSH 方式的端口
g i t p u s h git \ \ push git push 推送到默认远程仓库更新内容
g i t p u l l git \ \ pull git pull 拉取默认远程仓库更新内容
9. 关联本地仓库和远程仓库
进入本地创建好的仓库, 然后执行
g i t r e m o t e a d d < s h o r t n a m e > < u r l > git \ \ remote \ \ add \ \ <shortname> \ \ <url> git remote add <shortname> <url> , 一般默认 shortname 为 origin 为远程仓库的别名, 作用是将本地项目连接到远程Git仓库
g i t r e m o t e − v git \ \ remote \ \ -v git remote −v , 查看当前仓库所已关联的远程仓库的别名和地址
g i t p u s h − u o r i g i n m a s t e r git \ \ push \ \ -u \ \ origin \ \ master git push −u origin master , 注意, origin可能会在某个关节拼写错误, 导致push失败; 其次 最后一个参数一般为main, 具体看自己电脑上 git的版本, 完整写法是 main:main, 把本地仓库的main分支推送给远程仓库的main分支, 如果分支名词相同, 只需要写一个 main 即可, 这里我的都是 master, 第一次提交需要完整的写出来, 后续如果相同分支的提交, 使用 git push 即可
g i t p u l l < 远程仓库名 > < 远程分支名 > : < 本地分支名 > git \ \ pull \ \ <远程仓库名> \ \ <远程分支名>:<本地分支名> git pull <远程仓库名> <远程分支名>:<本地分支名>, 这里我的是 git pull origin master, 因为远程分支名和本地分支名相同 , 所以一个master即可, 这句话作用是拉取仓库别名为 origin 的 master 分支到本地, 与本地合并
g i t r e m o t e r e m o v e n a m e git \ \ remote \ \ remove \ \ name git remote remove name, 删除远程仓库别名列表
g i t r e m o t e r m o r i g i n git \ \ remote \ \ rm \ \ origin git remote rm origin, 删除已经添加的远程仓库
g i t r e m o t e r e n a m e o l d N a m e n e w N a m e git \ \ remote \ \ rename \ \ oldName \ \ newName git remote rename oldName newName, 远程仓库别名重命名
g i t r e m o t e s e t − u r l o r i g i n < u r l > git \ \ remote \ \ set-url \ \ origin \ \ <url> git remote set−url origin <url>, 更改默认的远程仓库
g i t r e m o t e a d d < 仓库别名 > < u r l > git \ \ remote \ \ add \ \ <仓库别名> \ \ <url> git remote add <仓库别名> <url> 增加关联仓库, 对于非默认仓库, 使用命令 git push <仓库别名> <分支名称>, 就可以推送
10. GItee 的使用和 Gitlab 的本地部署
11. GUI 工具
gitkraken
12. vscode 配置 GIt
13. 分支简介和基本操作
可以把分支看作是代码库中的不同版本, 可以独立存在并且有自己的提交记录, 适合团队协作和开发管理
多个开发人员可以在自己的分支上进行开发工作, 最后再合并到主线代码库中
可以在一个分支上进行新功能开发, 或者建立一个问题修复的分支来处理一些bug和缺陷, 让主线代码仓库处于一个随时可用的比较稳定的状态, 而不会影响到其他功能的开发和测试,
g i t b r a n c h git \ \ branch git branch 查看所有分支
g i t b r a n c h < b r a n c h n a m e > git \ \ branch \ \ <branch \ \ name> git branch <branch name>, 创建一个新分支
g i t c h e c k o u t < b r a n c h n a m e > git \ \ checkout \ \ <branch \ \ name> git checkout <branch name>, 切换分支, 还有恢复文件的作用, 当文件和分支名相同时, 默认切换分支而不是恢复文件, Git 2.23 版本开始提供
g i t s w i t c h < b r a n c h n a m e > git \ \ switch \ \ <branch\ \ name> git switch <branch name>, 专门用来切换分支的命令
g i t m e r g e d e v git \ \ merge \ \ dev git merge dev, 先切换到main分支, 然后执行, 这样操作就表示把分支 dev 合并到 main 中, 提示选择默认保存即可
g i t b r a n c h − d n a m e git \ \ branch \ \ -d \ \ name git branch −d name 删除分支, d 参数是删除已经合并完的分支 , D 参数是强制删除 , 可以删除未合并的分支
14. 解决合并冲突
两个分支修改了同一个文件的同一行代码, 进行合并就会产生冲突
产生冲突后, 可以用 git status 查看冲突文件的列表, 也可以使用 git diff 查看冲突具体内容
当把feat分支合并到main分支后, main 分支中产生冲突的文件 main1.txt, 产生冲突的地方就会以 git diff 中的差异进行显示, 手动修改好后, 提交到本地仓库即可
在提交之前想要中断这次合并, 可以使用 git merge --abort
15. 回退和rebase
rebase, 变基
首先切换到要移动的分支上 git switch dev, 然后 git rebase main, 将 dev 变基到 main 上, 就是 dev 分支在 main 和 dev 公共祖先节点处断开, dev 分支接到 main 的最新提交节点 HEAD 上
alias 命令类似define 和 typredef, 可以精简长命令
Merge 和 Reabse 的区别
Merge
优点: 不会破坏原分支提交历史, 方便回溯和查看
缺点: 会产生额外的提交节点, 分支图比较复杂
Rebase
优点: 不会新增额外的提交记录, 形成线性历史, 比较直观和干净
缺点: 会改变提交历史, 改变了当前分支branch out的节点
应避免在共享分支上使用