• Git 笔记


    git 原理

    git 的四个区域

    四个区域

    • 工作区:平时存放项目代码的地方
    • 暂存区:用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
    • 本地仓库:仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
    • 远程仓库:托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

    文件的四种状态

    在这里插入图片描述

    • Untracked: 未跟踪, 此文件在文件夹中,但并没有加入到git库,不参与版本控制, 通过 git add 状态变为Staged。
    • Unmodify: 文件已经入库且未修改, 即版本库中的文件快照内容与文件夹中完全一致,这种类型的文件有两种去处,如果它被修改, 而变为Modified,如果使用git rm移出版本库, 则成为Untracked文件。
    • Modified:文件已修改,仅仅是修改,并没有进行其他的操作,这个文件也有两个去处,通过 git add 可进入暂存 staged 状态,使用git checkout 则丢弃修改,返回到unmodify状态, 这个git checkout即从库中取出文件,覆盖当前修改
    • Staged:暂存状态,执行git commit则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为Unmodify状态。

    git 的工作流程

    1. 在工作目录中添加、修改文件;
    2. 将需要进行版本管理的文件 add 到暂存区域;
    3. 将暂存区域的文件 commit 到 git 仓库;
    4. 本地的修改 push 到远程仓库,如果失败则执行第5步(你千万不要把公司代码传到GitHub上去!!!
    5. git pull 将远程仓库的修改拉取到本地,如果有冲突需要修改冲突。回到第三步
      因此,git 管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

    安装git

    • linux 下:
    sudo apt install git
    

    验证安装:

    git --version
    
    • windows下:
      在官网下载进行安装:GIt

    配置信息和获取帮助

    1. 设置用户名称与邮件地址,不加--global即在项目下使用特定的用户
    git config --global user.name "your name"
    git config --global user.email "your email"
    

    查看 git 的配置信息

    git config --list
    
    1. 获取帮助
    git help <verb>
    

    常用命令

    创建仓库

    创建仓库有两种方法:

    • 本地仓库
    mkdir proj && cd proj
    git init
    
    • 拉取远程仓库
    git clone url
    

    跟踪文件 git add

    git add <path>
    // 比如跟踪目录下所有文件
    git add .
    // 跟踪 .cpp 文件
    git add *.cpp
    

    取消跟踪 git rm

    git add 将文件添加到暂存区,git rm 将文件从暂存区删除(不再被 git 管理)

    // 从暂存区删除且将文件删除
    git rm -f <file>
    // 仅将文件从暂存区删除
    git rm --cached <file>
    

    提交到仓库 git commit

    git commit -a -m "修改了......"
    
    • 优雅的提交你的修改:
      message的格式:
         <type>(<scope>): <subject>
         <BLANK LINE> 
         <body> 
         <BLANK LINE> 
         <footer>
    

    type

    • feat: 新特性
    • fix: 修改问题
    • refactor: 代码重构
    • docs: 文档修改
    • style: 代码格式修改, 注意不是 css 修改
    • test: 测试用例修改
    • chore: 其他修改, 比如构建流程, 依赖管理.

    scope:

    • commit 影响的范围,即影响的模块或者组件,比如: route, component, utils, build…

    subject:

    • commit 的概述

    body:

    • commit 具体修改内容, 可以分为多行, 建议符合 50/72 formatting

    footer:

    • 一些备注, 通常是 BREAKING CHANGE 或修复的 bug 的链接,或者feature等等其余的信息.

    推送到远程分支 git push

    1. 首先,你需要关联远程仓库,在此之前先生成 ssh key
    // ssh-keygen [-t type] [-b bits] [-C comment] [-f output_keyfile] [-N new_passphrase] [-P passphrase]
    ssh genkey -t rsa -b 2048 -C "youremail"
    

    然后将密钥填到 github 上。
    查看分支:

    git branch
    // 修改 master 为 main
    git branch -M main
    
    1. 关联远程仓库
    // git remote add <remote_name> <remote_repository_url>
    git remote add origin url
    // 查看关联了哪些远程仓库
    git remote -v
    
    1. 推送
      第一次推送时加上 -u [set-upstream]建立追踪关系,后续不加分支名会自动推送到这个分支。本地分支可以追踪多个分支。

      // git push <remote_name> <local_branch>:<remote_branch>
      git push -u origin main:main
      
    2. 冲突

    • 冲突的产生:假设A和B共同维护一个项目,从同一个分支main开始工作。A克隆了仓库到本地,并在readme.md文件的末尾添加了一行文字:“添加了新功能A”。然后提交更改并推送到GitHub上的main分支。B也在本地仓库中对readme.md进行了修改,在文件末尾添加了另一行:“修复了错误B”。当B尝试推送更改到main分支时,GitHub会阻止推送,因为B的分支落后于远程的main分支(因为A刚刚推送了更新)。
    • 解决:首先git pull,然后手动解决冲突。
    git config pull.rebase false  # 合并(默认策略)
    git config pull.rebase true   # 变基
    git config pull.ff only
    

    commit 的 查看、修改、合并

    1. 查看
    git log
    git log --oneline
    // 显示几行
    git log --[length]
    // 跳过skip条,显示length条
    git log --skip=[skip] -[length]
    git log -p
    git log --stat
    git shortlog
    // 过滤
    // data
    git log --after="2000-10-1"
    git log --before="2024-5-1"
    // author
    git log --author="ningao"
    
    
    1. 修改
    // 覆盖上一次修改id
    git commit --amend
    // 修改任意提交的message
    git rebase -i id
    
    1. 合并
    git rebase -i id
    
    1. 比较两次commit之间的差异
      首先使用 git log --oneline 查看历史提交记录
      在这里插入图片描述
      使用 git diff hash1 hash2 --stat 查看两次提交之间的差异,这里因为建库时没有写.gitignore文件,所以tracking 了 build 文件夹
      在这里插入图片描述
      使用 git diff hash1 hash2 filename查看某一个文件修改了那些地方

    版本回退

    1. 尚未commit
    // git-checkout - Switch branches or restore working tree files
    git checkout branches/stable-1.1
    git checkout a5673b8
    git checkout a.cpp
    
    1. 已经commit尚未push到remote仓库
    // git-reset - Reset current HEAD to the specified state
    // --soft
    // --mixed
    // --hard
    
    
    1. 已经提交到remote仓库

    搭建 git 服务器

  • 相关阅读:
    【校验】7校验url是否图片类型
    6.二叉树.题目3
    FLinkCDC
    idea maven helper处理冲突
    机器学习知识点:模型加权集成7种方法
    面试金典--面试题 16.18. 模式匹配 (正则)
    CANoe-Ethernet IG和Ethernet Packet Builder的使用和区别
    聊聊logback的EvaluatorFilter
    根据身高重建队列
    【Nginx24】Nginx学习:压缩模块Gzip
  • 原文地址:https://blog.csdn.net/weixin_51332735/article/details/139418541