一小时学习 Git 笔记

一小时Git教程传送门

git 基础

1. 起始配置

# 配置自己的姓名
git config --global user.name "Your Name" 
# 配置自己的邮箱
git config --global user.email "[email protected]" 
    
    注意
    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 

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  "文本" , 将产品送到本地仓库

直接使用 $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  lsfiles 查看暂存区内容

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 比较分支之间的差异

6. git rm 删除文件

rm 删除文件只能删除掉个工作区的文件, 然后还要 git add . , 更新暂存区

$git \ \ rm $ , 可以直接在工作区和暂存区删除文件

g i t    r m    − − c a c h e d    < f i l e > git \ \ rm \ \ --cached \ \ 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 \ \ \ \ 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 \ \ git  remote  seturl  origin  <url>, 更改默认的远程仓库

g i t    r e m o t e    a d d    < 仓库别名 >    < u r l > git \ \ remote \ \ add \ \ <仓库别名> \ \ 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 \ \ 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 \ \ 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 \ \ 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的节点
    应避免在共享分支上使用

16. 分支管理和工作流模型

你可能感兴趣的:(学习,git,笔记)