当前位置: 首页 > news >正文

正点原子RK3568学习日记-GIT



1.GIT核心概念回顾

  1. 工作目录 (Working Directory):您在电脑上能看到的文件和文件夹,是您进行代码修改的地方。

  2. 暂存区 (Staging Area / Index):一个位于 .git 目录下的文件,它记录了您下次要提交(commit)的文件快照。git add 命令就是将工作目录的修改添加到这里。

  3. 本地仓库 (Local Repository):您本地电脑上存储项目历史记录的地方。当您运行 git commit 时,GIT 会将暂存区的文件快照永久性地保存到您的本地仓库中。

  4. 远程仓库 (Remote Repository):托管在网络服务器上的项目仓库,用于团队协作和数据备份(例如 GitHub、GitLab)。

2.初始化与配置

这类命令用于开始一个新项目或配置您的 Git 环境。

命令解释与修正
git init <目录>在指定目录中创建一个新的、空的 Git 仓库。如果省略目录,则在当前目录创建。
git clone <仓库地址>克隆一个远程仓库到本地,自动设置好远程连接。
git config --global user.name <名字>(修正) 设置全局的用户名,所有本地仓库都会使用这个配置。
git config --global user.email <邮箱>(修正) 设置全局的用户邮箱。PDF 中有一处误写为 user.name <email>。
git config --global alias.<别名> <命令>为 Git 命令设置别名,提高效率。例如 git config --global alias.glog "log --graph --oneline"。
git config --global core.editor <编辑器>配置 Git 默认使用的文本编辑器,例如 vim 或 vscode。

场景: 你想开始一个名为 my-project 的新项目,并配置好你的个人信息。


解释: 这会在 my-project 文件夹中创建一个新的 .git 子目录,你的项目现在就是一个 Git 仓库

mkdir my-project
cd my-project
git init

场景: 你想参与一个 GitHub 上的开源项目。

解释: 这会将远程的 Git 项目完整地复制到你本地的 git 文件夹中。

git clone https://github.com/git/git.git

场景: 第一次使用 Git,你需要设置你的名字和邮箱,这样你的提交才会被正确标识。

解释: 设置了全局的用户名和邮箱。现在你在这台电脑上的所有 Git 操作都会使用这个身份。

git config --global user.name "Your Name"
git config --global user.email "youremail@example.com"

3.日常基本工作流程

这是您每天都会用到的核心命令。

命令解释与补充
git status显示工作目录和暂存区的状态,查看哪些文件被修改、暂存或未被跟踪。
git add <文件/目录>将工作目录中指定文件/目录的修改添加到暂存区。
git add -p(交互模式) 逐个代码块地将修改添加到暂存区,非常适合用于拆分提交。
git commit -m "<提交信息>"将暂存区的所有内容生成一次新的提交,并附上提交信息。
git commit -a -m "<信息>"(补充) 将所有已跟踪文件的修改自动暂存,然后提交。相当于 git add . 和 git commit 的结合,但不会添加新创建的(未跟踪的)文件。
git diff查看工作目录暂存区之间的差异。
git diff --cached 或 git diff --staged查看暂存区上一次提交 (HEAD) 之间的差异。
git diff HEAD查看工作目录上一次提交 (HEAD) 之间的差异。

场景: 你在项目中创建了一个新文件 index.html 并添加了一些内容,现在你想把它提交到仓库。

命令: git status

解释: Git 告诉你有一个 “未跟踪” 的文件 index.html。

On branch main
Untracked files:(use "git add <file>..." to include in what will be committed)index.html

命令: git add index.html

解释: 将 index.html 文件添加到暂存区,准备提交。再次运行 git status 会看到文件状态变成了 “Changes to be committed”。

命令: git commit -m "feat: Create initial index.html"

解释: 将暂存区中的所有内容(也就是 index.html)创建成一次新的提交,并附上提交信息。

命令: git diff

场景: 你修改了 index.html 但还没有 git add

解释: 显示你当前工作目录的修改与暂存区内容的区别。


命令: git diff --cached

场景: 你修改了 index.html 并且已经 git add 了,但又在工作区做了新的修改。

解释: 显示暂存区的内容和上一次提交 (HEAD) 的区别。

4.查看历史与状态

用于浏览和检查项目的提交历史。

命令解释与补充
git log显示从最近到最远的提交历史。
git log --oneline以单行简洁模式显示提交历史。
git log --graph以图形化方式显示分支的合并历史。
git log -<数量>仅显示最近指定数量的提交,例如 git log -5。
git log --author="<作者名>"按作者搜索提交。
git show <提交ID>显示某次提交的详细信息,包括元数据和代码变动。
git reflog(非常重要) 显示 HEAD 的所有移动记录。当您错误地重置(reset)或修改了历史时,可以用它来找回“丢失”的提交。

场景: 项目已经进行了一段时间,你想看看提交历史。

命令: git log

解释: 显示详细的提交历史,包括提交 ID、作者、日期和完整的提交信息。

命令: git log --oneline --graph

解释: 以简洁的单行格式显示历史,并用 ASCII 图形画出分支的合并情况,非常直观。

命令: git show a1b2c3d4 (这里的 a1b2c3d4 是某次提交 ID 的前几位)

解释: 显示某次特定提交的详细元数据和代码变动。


命令: git reflog

场景: 你用 git reset --hard 错误地删掉了一次提交,现在想找回来。

解释: reflog 会显示 HEAD 的所有移动记录。你可以从中找到误删操作之前的提交 ID,然后用 git reset --hard <找回的ID> 来恢复。

5.分支管理

分支是 Git 的核心功能之一,用于并行开发。

命令解释与补充
git branch列出所有本地分支,并标识出当前所在分支。
git branch <分支名>创建一个新分支,但不会自动切换过去。
git checkout <分支名>切换到指定分支。
git checkout -b <新分支名>创建一个新分支并立即切换过去。
git switch <分支名>(推荐使用) 这是较新的命令,专门用于切换分支。
git switch -c <新分支名>(推荐使用) 创建并切换到新分支,功能同 checkout -b。
git merge <分支名>将指定分支的历史合并到当前分支。

场景: 你要开发一个新功能 “user-login”,但不想影响主分支 main 的稳定性。

命令: git switch -c feature/user-login (等同于旧的 git checkout -b feature/user-login)

解释: 创建一个名为 feature/user-login 的新分支,并立即切换到这个分支上。

命令: git switch main

解释: 切换回 main 主分支。

命令: git merge feature/user-login

解释: 在 main 分支上,将 feature/user-login 分支的所有提交合并进来。现在 main 分支也拥有了登录功能。

6.撤销工作区或暂存区的修改

命令解释与补充
git restore <文件>(新增&推荐) 撤销工作目录中对文件的修改,恢复到暂存区或上一次提交的状态。
git restore --staged <文件>(新增&推荐) 将文件从暂存区移出,但保留工作目录中的修改。效果同 git reset <文件>。
git checkout -- <文件>(旧命令) 功能同 git restore <文件>,丢弃工作目录的修改。

git reset <文件>
(旧命令) 功能同 git restore --staged <文件>,取消暂存。

命令: git restore index.html     (撤销工作区修改)
场景
: 你把 index.html 改乱了,想撤销所有修改,回到上次提交时的状态。

解释: 丢弃工作目录中对 index.html 的所有修改。

命令: git restore --staged config.log    (取消暂存)

场景: 你不小心用 git add 把一个不想提交的文件 config.log 加入了暂存区。

解释: 将 config.log 从暂存区移出,但文件在工作目录的修改内容仍然保留。

7.修改提交历史记录(重置,恢复,修正)

命令解释与补充
git commit --amend修改最后一次提交。将暂存区的修改合并到 HEAD 提交中,可以用来修改提交内容或仅仅修改提交信息。注意:这会生成一个新的提交ID。
git revert <提交ID>“反转”一次提交。它会创建一个新的提交,其内容正好与指定提交的内容相反,用于安全地撤销已推送到远程仓库的提交。
git reset <提交ID>移动当前分支的指针。它有三种模式,这是理解的关键:
git reset --soft <提交ID>最轻量:仅将 HEAD 指针移动到目标提交。您的暂存区和工作目录的修改都保留。常用于合并多个提交。
git reset --mixed <提交ID>默认模式:移动 HEAD 指针,并重置暂存区。您的工作目录的修改保留。常用于拆分提交。
git reset --hard <提交ID>最彻底:移动 HEAD 指针,并重置暂存区和工作目录。所有未提交的修改都会被永久删除,请谨慎使用!

命令: git commit --amend -m "feat: Create initial index.html"      (修改最后一次提交)

场景: 你刚提交完,发现提交信息里有个错别字。

解释: 这会用新的提交信息覆盖掉上一次的提交。如果你在运行此命令前 git add 了新文件,这些文件也会被一并添加到上一次提交中。

命令: git revert a1b2c3d4

场景: 你推送了一个有 Bug 的提交 a1b2c3d4 到远程仓库,团队其他人已经拉取了。直接 reset 会搞乱别人的历史,所以需要安全地撤销。

解释: Git 会创建一个新的提交,这个新提交的内容刚好与 a1b2c3d4 的修改完全相反,从而抵消了它的影响。

命令: git reset --soft HEAD~3

场景: 你在本地连续做了 3 次提交,但觉得它们其实应该合并成一个。

解释: 将 main 分支的指针退后 3 次提交,但所有的代码修改都保留在暂存区。现在你只需要运行一次 git commit -m "feat: Implement the whole feature" 就可以将这 3 次提交合并成一次了。

8.交互式基础(变基  -i)

git rebase -i <基底提交> 是一个强大的历史编辑工具,可以用来实现您笔记中提到的“交换提交顺序”和“修改非头部提交”。

在交互界面中,您可以对每个提交执行以下操作:

  • pick: 保留该提交。

  • reword: 保留该提交,但修改提交信息。

  • edit: 保留该提交,但暂停 rebase 过程,让您可以修改提交内容(例如拆分提交)。

  • squash: 将该提交与前一个提交合并,并合并提交信息。

  • fixup: 同 squash,但丢弃该提交的提交信息。

  • drop: 删除该提交。

  • 通过拖动行的顺序,可以交换提交的先后顺序

9.远程仓库协作

命令解释与补充
git remote -v显示所有远程连接的详细信息。
git remote add <别名> <URL>添加一个新的远程仓库连接。
git fetch <远程别名>从远程仓库下载最新的历史记录,但会自动合并到您当前的工作分支。
git pull <远程别名> <分支>从远程仓库拉取最新历史并自动合并 (merge) 到当前分支。相当于 git fetch + git merge。
git pull --rebase使用 rebase 而不是 merge 来合并远程更改,可以保持提交历史的线性整洁。
git push <远程别名> <分支>将本地分支的提交推送到远程仓库。
git push --force(危险) 强制推送,会覆盖远程仓库的历史。强烈建议使用 --force-with-lease 作为更安全的选择,它能确保您不会覆盖团队成员的新提交。

场景: 你在本地 main 分支完成了新功能,现在要把它推送到 GitHub。

命令: git remote add origin https://github.com/your-username/my-project.git

解释: 添加一个名为 origin 的远程仓库地址。origin 是一个普遍使用的别名。

命令: git fetch origin

场景: 在推送前,你想看看远程仓库有没有你不知道的更新。

解释: 从 origin 下载所有最新的分支和提交历史到你的本地,但它不会修改你当前的工作代码。

命令: git pull origin main

场景: 你的同事更新了 main 分支,你需要将这些更新同步到你的本地。

解释: 从远程的 main 分支拉取最新代码,并自动与你的本地 main 分支合并。

命令: git push origin main

解释: 将你本地 main 分支上的所有新提交推送到名为 origin 的远程仓库的 main 分支上。


10.补充重要命令

命令解释与补充
git stash暂存工作。将您当前工作目录和暂存区中未提交的修改临时保存起来,让您可以切换到其他分支工作。
git stash pop恢复最近一次暂存的工作。
git stash list查看所有暂存的列表。
git tag <标签名>为某次提交打上一个有意义的标签,通常用于标记版本发布,如 v1.0.0。
http://www.dtcms.com/a/465187.html

相关文章:

  • 在Minio以STS方式获得临时凭据
  • 【多线程】屏障(Barrier)
  • 通过高新区网站建设兰州市城乡建设局网官网站
  • 商城网站建设如何建设网站设计的公司
  • 【OPENGL ES 3.0 学习笔记】第一天:认识渲染管道
  • 从数据沼泽到智能决策:数据驱动与 AI 融合的中台建设方法论与技术实践指南(二)
  • Trae Solo+豆包Version1.6+Seedream4.0打造“AI识菜通“
  • Linux 基金会牵头成立 React 基金会:前端开源生态迎来里程碑式变革
  • 机器学习数据处理
  • 学习笔记: 从C语言基础到Python基础的过渡
  • C语言编写、测试、维护、审查规范
  • 公司网站建设价格标准东莞产品网络推广
  • 从KPI入手,全面掌握LTE网络性能测试与优化
  • 基于LLaMA-Factory的LoRA微调实战与性能剖析​
  • 网络层协议之VRRP协议
  • 3.2 无连接传输: UDP
  • 利用R语言绘制直方图
  • Transformer Decoder 中序列掩码(Sequence Mask / Look-ahead Mask)
  • 《R for Data Science (2e)》免费中文翻译 (第9章) --- Layers(2)
  • php集成VSCode开发
  • 邯郸市民网企业网站优化公司有哪些
  • 陕西 餐饮 网站建设外贸网站建设公司价格
  • 开源书签管理器Faved
  • 【全开源】企业微信SCRM社群营销高级版系统+uniapp前端
  • 深入浅出MATLAB数据可视化:超越plot()
  • 基于IMBT框架的定制开发开源AI智能名片S2B2C商城小程序直播营销规范化研究
  • 开源 C++ QT QML 开发(十五)通讯--http下载
  • 【CANN训练营】+开源之星+GitCode算子开发环境快速搭建手册
  • 西安网站建设网站网站集约化建设
  • 设计网站名称wordpress无法发送