【实习总结】快速上手Git:关键命令整理

目录

git的四大工作区域

git首次配置

克隆远程仓库

提交代码到远程仓库

查看文件状态(可选)

添加文件到暂存区

将暂存区的内容提交到本地仓库

将本地的提交上传到远程仓库

拉取并合并代码

第一种方式

第二种方式

分支管理

查看与创建分支

切换分支

合并分支

删除分支

撤销与修改

修改最后一次提交

版本回退 (本地) 

撤销提交

临时储藏(好用)

追溯代码

git blame

git log

git show


git的四大工作区域

在开始介绍git常用操作之前,我们先对git四大工作区域进行介绍,方便后续理解。

1、工作区

是什么:工作区就是我们在电脑上能直接看到的项目文件夹,包含所有源代码、图片等文件,也就是我们直接用编译器进行修改的地方。

文件状态:文件可能处于“已修改”或者“未跟踪”状态。

2、暂存区

是什么:一个位于.git目录中、看不见的特殊文件,它像一个购物车或者待提交清单。

作用:我们如果在工作区做了很多修改,但是我们只想提交其中两个,这时,把这两个文件的快照添加(git add)到暂存区,暂存区能够让我们精确的控制下一次提交要包含哪些内容。

3、本地仓库

是什么: 位于 .git 目录中的另一个部分,它保存了项目所有版本(提交)的完整历史记录。可以把它想象成一个个人电脑上的“版本档案馆”。

作用: 当我们执行 git commit 时,Git 会把 暂存区 里的所有内容,打包成一个永久性的版本快照(一个 commit 对象),并存入本地仓库。这个过程完全在本地电脑上完成,不需要联网。

4、远程仓库

是什么: 托管在网络服务器上的项目仓库(例如 Gitee、GitHub)。

作用: 这是团队成员之间共享代码、同步进度的“中央服务器”。我们可以把本地仓库的提交“推送 (push)”到远程仓库,也可以从远程仓库“拉取 (pull)”别人的提交。

git首次配置

在我们提交前,需要先署名,这个签名会嵌入后续的每一次提交中,方便后期代码追溯。

# 设置你的用户名 (这个名字会显示在提交历史里)
git config --global user.name "名字或昵称"# 设置你的邮箱 (最好和 Gitee/GitHub 账号邮箱一致)
git config --global user.email "your.email@example.com"#查看当前 Git 的所有配置信息
git config --list

这个操作只要在刚开始执行一次就好了,效果如下:

克隆远程仓库

在一开始,我们通常需要从远程服务器完整地复制一个项目代码文件以及所有历史到本地电脑上。

命令如下:

git clone <url>

示例:

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

这个url,我们去git项目目录下获取即可,如下:

提交代码到远程仓库

查看文件状态(可选)

查看状态,以此可以看到当前每个文件处于哪个区域

git status

添加文件到暂存区

将工作区地修改“快照”并添加到待提交清单中

# 添加一个指定文件
git add main.cpp# 添加一个指定目录
git add src/# 添加所有当前目录下的已修改或新创建的文件
git add .

将暂存区的内容提交到本地仓库

将暂存区的所有内容生成一个永久性的快照,并保存到本地仓库的版本历史中。

# 提交并打开默认编辑器来填写提交信息
git commit# 提交并直接在命令行中附带提交信息 (最常用)
git commit -m "修复了用户登录的bug"# 将 add 和 commit 合并为一步 (仅对已跟踪过的文件有效)
git commit -am "更新了文档说明"

将本地的提交上传到远程仓库

将本地仓库的修改上传到远程仓库。

# 将本地的 main 分支推送到名为 origin 的远程仓库
git push origin main

但是在多人协作的时候,可能会存在其他人对远程仓库进行了新的提交,那么此时,我们本地仓库代码就和远程仓库代码产生了冲突,此时就需要拉取最新的代码到本地,进行合并后在提交到远程仓库

如果合并过程中,两个分支修改了同一个文件的同一行,就会产生 合并冲突。Git 会在文件里标记出冲突,需要你手动编辑文件,解决冲突后,再 add 和 commit 来完成合并。

拉取并合并代码

第一种方式

1、获取远程仓库最新信息

# 从名为 origin 的远程仓库获取所有更新
git fetch origin

从远程仓库下载最新的历史记录和信息(比如新的提交、新的分支),并更新你本地的远程跟踪分支,不会修改本地工作区里的任何文件。

2、检查更新内容

看看新获取的更新,修改了什么

# 比较你本地的 main 和刚刚更新的远程 main 有什么不同
git log main..origin/main# 或者,如果你想看具体的文件差异
git diff main origin/main

3、合并代码

# 确保你当前在自己的 main 分支上
git switch main# 将远程 main 分支的修改,合并到你本地的 main 分支
git merge origin/main

第二种方式

拉取并合并 从远程仓库获取最新版本,并自动与你的本地分支合并。它相当于 git fetch + git merge 。

# 拉取远程仓库名为origin的 main 分支,并与本地当前分支合并
git pull origin main

分支管理

分支是 Git 的精髓,它允许我们创建一条独立的开发线,去开发新功能或修复bug,而不会弄乱主线。

查看与创建分支

# 列出所有本地分支,并高亮当前分支
git branch# 创建一个名为 feature/new-login 的新分支
git branch feature/new-login

切换分支

git checkout <branch> 或 git switch <branch>,切换分支,工作区文件会瞬间变成那个分支所指向的状态

# 切换到已存在的分支
git switch feature/new-login# 创建并立即切换到新分支 (复合命令,非常常用)
git switch -c hotfix/bug-123

合并分支

将一个分支的修改,合并到当前所在的分支。

# 1. 首先,切换到接受合并的目标分支 (如主分支)
git switch main# 2. 然后,执行合并,将 feature 分支合入
git merge feature/new-login

删除分支

# 删除一个已经合并过的本地分支
git branch -d hotfix/bug-123

撤销与修改

修改最后一次提交

git commit --amend修改最后一次提交 如果提交后发现有小错误(比如注释写错了),可以用它来修正。

git commit --amend "bug修改"
git commit --amend --no-edit  # --no-edit 表示不修改上次的提交信息

版本回退 (本地) 

移动分支指针,回到过去某个版本。 警告:如果提交已推送到远程,请不要使用,因为它会重写历史,给团队带来麻烦。

常用选项

  • - --soft : 仅移动 HEAD 指针,你的工作区和暂存区不变。
  • - --mixed (默认): 移动 HEAD,并重置暂存区,但工作区不变。
  • - --hard : (极度危险) 移动 HEAD,并 彻底重置 暂存区和 工作区 ,所有未提交的修改都会 永久丢失 。
# 彻底回退到上一个版本,工作区和暂存区都恢复 (危险!)
git reset --hard HEAD~1

撤销提交

创建一个新的提交 ,其内容刚好是指定提交的 反向操作 。这是推荐的撤销方式 ,因为它不重写历史,适合用于撤销已经推送到远程的提交。

git revert <commit_hash_of_bad_commit>

临时储藏(好用)

当你手头工作没做完,但需要紧急切换到别的分支时,用它来保存当前工作区和暂存区的修改。

# 保存当前修改
git stash save "temp message"# 处理完别的事情后,回来恢复
git stash pop#查看所有暂存的更改
git stash list#应用最近一次暂存的更改
git stash apply#删除指定的暂存记录
git stash drop

追溯代码

  • 想知道某一行代码是谁写的?  用 git blame 。

  • 想知道某个文件/项目的演变过程? 用 git log 。

  • 想看某次提交到底干了什么? 先用 git log 找到它,再用 git show 查看它。

git blame

        如果想知道某一行代码是谁、在哪个版本、什么时候修改的,可以使用git blame,他会按行显示文件的每一行最后是被哪个提交修改的。

# 查看指定文件的每一行代码的“身世”
git blame [文件路径]

git log

git log 是一个功能极其丰富的历史浏览器,可以让我们查看一个分支、一个文件甚至一个函数的完整演变历史。

常用选项:

  • git log --oneline : 单行显示,更紧凑。
  • git log --graph : 以图形方式展示分支的合并与分叉。
  • git log -p <文件名> : 显示指定文件的历史,并附带每次提交的具体代码差异。
  • git log --author="作者名" : 只看某个特定成员的提交。

a)查看整个项目的历史

# 查看所有提交记录
git log# 查看简化的单行历史,并带上分支图
git log --oneline --graph --decorate

b)查看单个文件的所有修改记录

git log [文件路径]

c)查看单个文件内容的具体的变化记录

如果我们不仅想看提交记录,还想看每次提交具体改了什么代码 ,可以加上 -p 参数

git log -p [文件路径]

这会把每一次涉及该文件的修改,用 diff 的格式全部展示出来。

git show

当我们通过 git log 或 git blame 找到了一个可疑的提交哈希码(比如 c4d2a8f ),可以用 git show 来查看这次提交的所有细节,比如(作者、日期、提交信息)和它所做的所有代码改动。

git show [提交哈希码]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94455.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

02-开发环境搭建与工具链

第2课&#xff1a;开发环境搭建与工具链 &#x1f4da; 课程目标 掌握DevEco Studio的下载、安装和配置熟悉HMS Core&#xff08;华为移动服务&#xff09;的使用了解鸿蒙模拟器与真机调试环境掌握必备开发工具的使用 &#x1f6e0;️ DevEco Studio环境搭建 2.1 下载与安装…

删掉一个元素以后全为1的最长子数组-滑动窗口

1493. 删掉一个元素以后全为 1 的最长子数组 - 力扣&#xff08;LeetCode&#xff09; Solution #include<iostream> #include<vector> using namespace std;class Solution { public://滑动窗口//动态维护一个窗口&#xff0c;窗口内只能有1个0&#xff0c;记录窗…

【计算机网络 | 第8篇】编码与调制

文章目录通信系统中的编码与调制&#xff1a;从信道基础到信号传输技术一、信道与通信电路&#x1f342;二、三种基本通信方式&#x1f4d6;1. 单向通信&#xff08;单工通信&#xff09;2. 双向交替通信&#xff08;半双工通信&#xff09;3. 双向同时通信&#xff08;全双工通…

当AI遇上终端:Gemini CLI的技术魔法与架构奥秘

"代码不仅仅是指令的集合&#xff0c;更是思想的载体。当AI与终端相遇&#xff0c;会碰撞出怎样的火花&#xff1f;" 在这个AI技术日新月异的时代&#xff0c;Google推出的Gemini CLI无疑是一颗璀璨的明星。它不仅仅是一个命令行工具&#xff0c;更是一个将人工智能无…

ViLU: Learning Vision-Language Uncertainties for Failure Prediction

研究方向&#xff1a;Image Captioning1. 论文介绍本文提出ViLU&#xff08;Vision-Language Uncertainties&#xff09;&#xff0c;一个用于学习视觉语言不确定性量化&#xff08;UQ&#xff09;和检测视觉语言模型故障的事后框架。使用VLMs进行量化&#xff08;UQ&#xff0…

数据集笔记:百度地图高德地图坐标互转

1 为什么会有高德坐标系和百度坐标系&#xff1f;根据《测绘法》和国家保密法规&#xff0c;在中国大陆范围内的地理坐标数据必须做加密处理&#xff0c;不允许直接使用 WGS84&#xff08;openstreetmap&#xff09;所以出现了GCJ-02 和 BD-09高德、腾讯、谷歌中国都遵循 GCJ-0…

SkyWalking高效线程上下文管理机制:确保调用链中traceId来自同一个请求

SkyWalking Agent 能确保获取到“正确”的 traceId,其核心在于它建立并维护了一套高效的线程上下文管理机制。这套机制确保了即使在复杂的多线程、异步环境下,也能将正确的上下文(包含 traceId)与当前正在执行的代码逻辑关联起来。 其工作原理可以概括为下图所示的流程: …

Kafka-Eagle安装

目录Eagle环境安装Mysql环境准备Kafka环境准备Eagle安装Kafka-Eagle框架可以监控Kafka集群的整体运行情况&#xff0c;在生产环境中经常使用 Eagle环境安装 Mysql环境准备 Eagle的安装依赖于Mysql&#xff0c;Mysql主要用来存储可视化展示的数据 将mysql文件夹及里面所有内…

Matlab系列(005) 一 归一化

目录1、前言2、什么是归一化&#xff1f;3、为什么要进行归一化4、归一化方法详解与Matlab实现5、总结1、前言 ​   归一化技术是数据预处理的核心环节&#xff0c;本文将深度解析主流归一化方法&#xff0c;提供可复现Matlab代码&#xff0c;并探讨其在各领域中的应用场景。…

【K8s】整体认识K8s之namespace

命名空间将资源划分为相互隔离的组。kubectl get namespace/ns系统默认创建四个namespace&#xff0c;分别是default、kube-node-lease、kube-public、kube-system。default 没有指明使用其它命名空间的对象所使用的默认命名空间、kube-system 系统创建对象所使用的命名空间。…

rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十八) 使用表格

使用表格egui_extras::TableBuilder // Cargo.toml [dependencies] eframe "0.32.1" egui "0.32.1" egui_extras "0.32.1"egui_extras::Column::auto() 列宽根据内容自动计算.resizable(true) 允许用户手动拖动调整列宽 fn main() -> efra…

【C#】构造函数实用场景总结

文章目录前言一、构造函数是什么&#xff1f;二、构造函数的用法1.初始化对象&#xff0c;避免无效状态2 初始化静态成员3 构造函数重载4.构造函数链5. 单例模式&#xff0c;多次实例化保持一个对象6. 依赖注入7. 初始化只读对象前言 构造函数是我们平常编程里经常能碰到的老伙…

LLM预训练架构全解析:从零构建一个语言世界的“操作系统”

导读&#xff1a;作为开发者&#xff0c;我们每天都在import或#include各种库&#xff0c;我们信任这些由无数代码构成的底层依赖。那么&#xff0c;当我们调用一个LLM时&#xff0c;它所依赖的那个更底层的、无形的**“语言操作系统”**&#xff0c;又是如何被“编译”出来的&…

Linux服务测试题(DNS,NFS,DHCP,HTTP)

一&#xff0c;实验拓扑&#xff1a;二&#xff0c;需求APPSRV&#xff1a;主机名&#xff1a;appsrv.example.comip地址&#xff1a;192.168.100.10网关&#xff1a;192.168.100.254网卡为NAT模式STORAGESRV&#xff1a;主机名&#xff1a;storagesrv.example.comip地址&#…

DevOps 简介及就业前景

DevOps 简介及就业前景 目录 DevOps简介核心概念重难点解析具体场景使用就业前景学习路径最佳实践 DevOps简介 什么是DevOps DevOps是Development&#xff08;开发&#xff09;和Operations&#xff08;运维&#xff09;的组合词&#xff0c;是一种软件开发和IT运维的文化…

《CF1120D Power Tree》

题目描述 给定一棵有 n 个顶点的有根树&#xff0c;树的根为顶点 1。每个顶点都有一个非负的价格。树的叶子是指度为 1 且不是根的顶点。 Arkady 和 Vasily 在树上玩一个奇怪的游戏。游戏分为三个阶段。第一阶段&#xff0c;Arkady 购买树上的一些非空顶点集合。第二阶段&…

CPTS-Agile (Werkzeug / Flask Debug)

枚举 nmap -sC -sV -T4 -Pn -n -p- 10.10.11.203进行常规的网页枚举和测试发现报错信息&#xff0c;‘Werkzeug / Flask Debug’ 测试Export导出功能发现存在路径遍历查看这篇文章 https://book.hacktricks.wiki/zh/network-services-pentesting/pentesting-web/werkzeug.html#…

【网络运维】Shell 脚本编程:while 循环与 until 循环

Shell 脚本编程&#xff1a;while 循环与 until 循环 循环结构简介 循环语句是 Shell 脚本中用于重复执行一条或一组指令的重要工具&#xff0c;直到满足特定条件时停止执行。Shell 脚本中常见的循环语句包括 while、until、for 和 select。本文将重点介绍 while 和 until 两种…

LLM 中评价指标与训练概要介绍

在【LLM】LLM 中增量解码与模型推理解读一文中对 LLM 常见名词进行了介绍&#xff0c;本文会对 LLM 中评价指标与训练概要进行介绍&#xff0c;本文并未介绍训练实操细节&#xff0c;未来有机会再了解&#xff5e; 一、LLM 如何停止输出 在看 LLM 评价指标前&#xff0c;先看…

Java 20 新特性及具体应用

目录 1. 模式匹配 for switch&#xff08;预览特性&#xff09; 2. 记录模式&#xff08;预览特性&#xff09; 3. 外部函数与内存 API&#xff08;预览特性&#xff09; 4. 矢量 API&#xff08;孵化器特性&#xff09; 5. 作用域值&#xff08;预览特性&#xff09; 6. …