• Git笔记


    git工作机制

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    git常用命令

    在这里插入图片描述

    在这里插入图片描述
    Instead of配置

    git config --global url.git@github.com:.insteadOf https://github.com/
    
    • 1

    将ssh协议替换为https协议

    Git命令别名配置

    git config --global alias.cin "commit --amend --no-edit"
    
    • 1

    用cin代替commit --no-edit

    SSH免密配置

    SSH可以通过公私钥的机制,将生成公私钥存放在服务端,从而实现免密访问
    目前的Key的类型有四种,分别是dsa、rsa、ecdsa、ed25519默认使用的是rsa,由于一些安全问题,现在已经不推荐使用dsa和rsa了,优先推荐使用ed25519.

    ssh-keygen -t ed25519 -C "your_email@example.com" 密钥默认存在~/.ssh/id_ed25519.pub
    
    • 1

    添加暂存区

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    git reset --files #撤销最后一次git add files,也可以用git reset撤销所有stage缓存
    git checkout -- files #把文件从 stage 缓存复制到工作目录,用来丢弃本地修改
    
    • 1
    • 2

    stash:保存现场

    1.建议(规范):在功能未没有开发完毕前,不要commit
    2.规定(必须)在没有commit之前,不能chekcout切换分支
    
    • 1
    • 2

    如果还没有将某一个功能开发完毕,就要切换分支: 建议 1.保存现场 (临时保存,stash)2.切换

    保存现场: git stash save “名字”
    还原现场: git stash pop(将原来保存的删除,用于还原内容)
    git stalish apply(还原内容,不删除原保存内容)
    git stalish drop(删除stash内容)
    查看现场: git stash list

    git rm x:删除已提交的文件后,文件会被放到暂存区
    彻底删除:git commit -m “删除的文件”

    git reset restore --staged 文件名 #指定文件回退到最近一次执行push后的的状态,清空暂存区,同时回退工作区文件状态。
    git restore 文件名 #
    
    • 1
    • 2

    rm :删除后的文件不会放到暂存区

    git rm等价于rm + git add

    git checkout – 丢弃工作区的修改,并用最近一次的commit内容还原到当前工作区

    提交本地库

    在这里插入图片描述

    在这里插入图片描述
    上一次的commit注释重写(重写提交说明)

    git commit --amend -m '修正'
    
    • 1

    修改历史版本:

    git commit --amend
    //通过这个命令可以修改最近的一次commit信息,修改之后commit id会变
    git rebase
    //通过git rebase -i HEAD~3可以实现对最近三个commit的修改
    //1.合并commit
    //2.修改具体的commit message
    //3,删除某个commit
    git filter --branch
    //该命令可以指定删除所有提交中的某个文件或者全局修改邮箱地址等操作
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    git reflog 查看引用日志信息
    git log 查看详细日志信息
    
    • 1
    • 2

    删除commit:

    GC:
    可以删除一些不需要的object,以及会对object进行一些打包压缩来减少仓库的体积

    Reflog:
    reflog是用于记录操作日志,防止误操作后数据丢失,通过reflog来找到丢失的数据,手动将日志设置为过期

    git reflog expire --expire=now --all
    
    • 1

    指定时间:
    git gc --prune=now 指定的是修剪多久之前的对象,默认是两周前

    git gc --prune=now
    
    • 1

    版本穿梭

    在这里插入图片描述

    在这里插入图片描述

    git reset --hard HEAD^ #前进一个版本
    git reset --hard HEAD^^#前进两个版本
    
    • 1
    • 2

    在这里插入图片描述

    git tag v0.0.1//生成版本
    git tag -a v0.0.2 -m "add feature 1"//创建版本并加备注信息
    
    • 1
    • 2
    #推送标签
    git push origin v1.0 v2.0
    
    #推送所有标签
    git push origin --tags
    
    • 1
    • 2
    • 3
    • 4
    • 5
    #拉取git指定标签
    git fetch origin tag v4.0
    
    • 1
    • 2
    #删除远程标签
    git push origin  :v1.0
    
    • 1
    • 2

    分支

    在这里插入图片描述
    分支实际就是一个commit链,一条工作记录线
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    分支切换是让head直接指向切换到的分支

    git branch -m <old branch name> <new branch name>
    
    • 1

    本地没有a分支,但本地却感知远端的a分支
    检测:git remote prune origin --dry-run

    git remote prune origin --dry-run
    
    • 1

    代码拉取

    在这里插入图片描述

    代码合并

    git merge 被合并分支
    
    git merge 被合并分支 --squash 
    目标分支的commit会合并成一个后再跟当前分支进行合并
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    不加–squash
    在这里插入图片描述
    加–squash

    1.Fast-Forward
    不会产生一个merge节点,合并后保持一个线性历史,如果target分支有了更新,则需要通过rebase操作更新source branch后才可以合入
    在这里插入图片描述

    2.Tree-Way Merge
    三方合并,会产生一个新的merge节点
    在这里插入图片描述
    git diff
    在这里插入图片描述

    git rebase
    冲突解决问题

    vi ... add ...commit
    git rebase 分支 --continue 
    
    git rebase 分支 --skip #rebase冲突时,用rebase对应分支的值
    
    终止。还原成rebase之前的场景
    git rebase --abort
    
    建议:不要再master上不要直接rebase
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    团队协作

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    创建远程仓库

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    拉取: git pull 别名 分支

    同一个Origin设置不同的Push和Fetch URL

    git remote add origin git@github.com:git/git
    git remote set-url --add --push origin git@github.com:MY_REPOSITY/git
    
    • 1
    • 2
    git push -u origin dev #上传dev分支
    git push origin dev:dev2 #本地dev推送到远端dev2
    git push origin HEAD:dev #将当前分支推送到远端dev
    
    • 1
    • 2
    • 3

    使用git将代码上传到github

    1. 进入文件夹输入:git init 在本地创建git仓库
    2. 输入:git add . 将文件夹全部数据添加到暂存区
    3. 输入:git commit -m “注释内容” 将暂存区文件上传到git仓库
    4. 在github上创建仓库在这里插入图片描述
      5.输入:git remote add origin https://github.com/xxxxx/test.git,和远程仓库连接
      在这里插入图片描述
    5. 输入 git branch -M main ,上传到 main 分支
    6. 输入 git push -u origin main 将本地项目推送到远程仓库

    git冲突及其解决

    git冲突的原因:
    在这里插入图片描述
    提交者的版本库<远程库

    如何实现本地同步:git pull

    问题及解决

    kex_exchange_identification: Connection closed by remote host Connection closed by 20.205.243.166 po

    ssh -T git@github.com -p 22
    
    • 1

    git的一些问题

    merge和rebase区别

    merge:
    在这里插入图片描述
    rebase:
    在这里插入图片描述

    merge合并时,会根据两个合并共同的父节点和两者的最新提交三者合并,形成一个最新的提交
    rebase合并时,会把两个合并共同的父节点之后的节点嫁接到一起,然后接到共同节点之后

    git merge 的优势:

    1.日志非常详尽,可以帮助理解每次merge发生的方式和时间的完整历史
    2.发现错误并解决它们很容易
    
    • 1
    • 2

    git merge的缺点:

    笨拙的日志/历史记录
    
    • 1

    git rebase 的优势:

    1.日志是线性的
    2.完成项目很容易
    
    • 1
    • 2

    缺点:

    无法追踪在目标分支上合并和commit的时间和方式
    
    • 1

    git cherry-pick

    git cherry-pick [commit hash] 将其他分支上已提交的commit在当前分支再提交一次,产生新的commithash
    git cherry-pick commit-idA…commit-idB 该指令是将从commit-idA开始到commit-idB之间的所有commit-id提交记录都合并过来

    建议:

    1.在共享分支上使用Git Merge
    2.在私有分支上使用Git Rebase
    
    • 1
    • 2

    git pull和git fetch

    git fetch只会将远程仓库的代码更新到本地库,但是不会自动合并到工作目录
    git pull会将远程仓库的代码更新到本地仓库,并且自动进行合并操作

    git diff
    在这里插入图片描述
    git diff A…B 比较的是B的head跟A和B的公共节点的区别
    git diff A…B 比较的是A的head跟B的head的不同

    git diff比较的是工作区和暂存区的区别
    git diff --cached sha1值 比较的是暂存区与对象区的区别

    git blame 文件名 查看文件的所有提交以及每一行的作者

    交互式rebase

    git rebase -i

    在这里插入图片描述
    顺序调整:
    在这里插入图片描述
    squash指令:
    在这里插入图片描述
    drop指令:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    《算法笔记》图专题
    第二章第七节:列表的概念
    解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?
    Python机器学习、深度学习在气象、海洋、水文领域实践应用
    ruoyi(若依)接口拦截路径配置,接口访问要授权,放开授权直接访问
    YOLOv5的Tricks | 【Trick12】YOLOv5使用的数据增强方法汇总
    Python长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析
    洛谷 1596.Lake Counting 5
    安捷伦N8974A分析仪
    Linux中Too many open files
  • 原文地址:https://blog.csdn.net/qq_43716830/article/details/125971505