Git 笔记

Git 笔记

  • [git 原理](#git 原理)
    • [git 的四个区域](#git 的四个区域)
    • 文件的四种状态
    • [git 的工作流程](#git 的工作流程)
  • 安装git
  • 配置信息和获取帮助
  • 常用命令
    • 创建仓库
    • [跟踪文件 git add](#跟踪文件 git add)
    • [取消跟踪 git rm](#取消跟踪 git rm)
    • [提交到仓库 git commit](#提交到仓库 git commit)
    • [推送到远程分支 git push](#推送到远程分支 git push)
    • [commit 的 查看、修改、合并](#commit 的 查看、修改、合并)
    • 版本回退
    • [搭建 git 服务器](#搭建 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 下:
bash 复制代码
sudo apt install git

验证安装:

bash 复制代码
git --version
  • windows下:
    在官网下载进行安装:GIt

配置信息和获取帮助

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

查看 git 的配置信息

bash 复制代码
git config --list
  1. 获取帮助
bash 复制代码
git help <verb>

常用命令

创建仓库

创建仓库有两种方法:

  • 本地仓库
bash 复制代码
mkdir proj && cd proj
git init
  • 拉取远程仓库
bash 复制代码
git clone url

跟踪文件 git add

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

取消跟踪 git rm

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

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

提交到仓库 git commit

bash 复制代码
git commit -a -m "修改了......"
  • 优雅的提交你的修改:
    message的格式:
bash 复制代码
     <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
bash 复制代码
// 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 上。

查看分支:

bash 复制代码
git branch
// 修改 master 为 main
git branch -M main
  1. 关联远程仓库
bash 复制代码
// git remote add <remote_name> <remote_repository_url>
git remote add origin url
// 查看关联了哪些远程仓库
git remote -v
  1. 推送
    第一次推送时加上 -u [set-upstream]建立追踪关系,后续不加分支名会自动推送到这个分支。
    本地分支可以追踪多个分支。
bash 复制代码
// git push <remote_name> <local_branch>:<remote_branch>
git push -u origin main:main
  1. 冲突
  • 冲突的产生:假设A和B共同维护一个项目,从同一个分支main开始工作。A克隆了仓库到本地,并在readme.md文件的末尾添加了一行文字:"添加了新功能A"。然后提交更改并推送到GitHub上的main分支。B也在本地仓库中对readme.md进行了修改,在文件末尾添加了另一行:"修复了错误B"。当B尝试推送更改到main分支时,GitHub会阻止推送,因为B的分支落后于远程的main分支(因为A刚刚推送了更新)。
  • 解决:首先git pull,然后手动解决冲突。
bash 复制代码
git config pull.rebase false  # 合并(默认策略)
git config pull.rebase true   # 变基
git config pull.ff only

commit 的 查看、修改、合并

  1. 查看
bash 复制代码
git log
git log --oneling
// 显示几行
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. 修改
bash 复制代码
// 覆盖上一次修改id
git commit --amend
// 修改任意提交的message
git rebase -i id
  1. 合并
bash 复制代码
git rebase -i id

版本回退

  1. 尚未commit
bash 复制代码
// 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仓库
bash 复制代码
// git-reset - Reset current HEAD to the specified state
// --soft
// --mixed
// --hard
  1. 已经提交到remote仓库

搭建 git 服务器

相关推荐
ajsbxi5 分钟前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
TeYiToKu26 分钟前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm
dsywws28 分钟前
Linux学习笔记之时间日期和查找和解压缩指令
linux·笔记·学习
binishuaio1 小时前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
会发光的猪。2 小时前
如何在vscode中安装git详细新手教程
前端·ide·git·vscode
cuisidong19972 小时前
5G学习笔记三之物理层、数据链路层、RRC层协议
笔记·学习·5g
乌恩大侠2 小时前
5G周边知识笔记
笔记·5g
stewie63 小时前
在IDEA中使用Git
java·git
咔叽布吉4 小时前
【论文阅读笔记】CamoFormer: Masked Separable Attention for Camouflaged Object Detection
论文阅读·笔记·目标检测
johnny2334 小时前
《大模型应用开发极简入门》笔记
笔记·chatgpt