深入解析:GIT 实战命令操作大全,代码变动,推动,修改备注,撤销(篇幅一)

news/2026/1/25 21:24:54/文章来源:https://www.cnblogs.com/ljbguanli/p/19530527

深入解析:GIT 实战命令操作大全,代码变动,推动,修改备注,撤销(篇幅一)

大家好,我是九逸,给大家分享git 实战操作命令

一、代码变动查看

1. 查看代码变动

git status

image-20251013214914010

2. 查看工作区与最新提交之间的变动(未暂存/已暂存)

git diff <文件路径>

image-20251013215942391

3. 查看某文件的完整修改历史(每次提交的变动)

git log -p <文件路径>

这个就不建议使用命令来查看了,直接使用工具来使用就挺好。

4. 查看某文件自某个提交以来的所有变动

git diff <commit-hash> HEAD -- <文件路径>
  • 比较从某个提交到当前 HEAD 版本之间的变化。

不常用

二、代码推送

如果第一次使用命令提交一定要注意当前分支,现在编译工具都集成了GIT,我们可以肆无忌惮的提交,但是使用命令一定要注意,可以使用下面的命令。

1. 查看当前分支

git  branch

image-20251013221152858

1. 第一次推送时设置上游分支(upstream)

使用编译器的可以不用看这个步骤,因为编译器已经集成好了

如果这是你第一次推送某个分支,可以这样:

git push -u origin <分支名>
  • -u 参数会将本地分支与远程分支关联(设置上游),之后可以直接用 git pushgit pull,无需再指定分支。

做个演示

git push -u origin dev

image-20251013221303211

2. 后续推送(已设置 upstream)
git push

可以直接使用 推送命令将代码提交到远端,当前现在编译器都集成了git,所有不用担心这个,只要分支切换对就行。

2. 提交命令

1. 提交到本地仓库
git add .
git commit -m "你的提交信息"

image-20251013221642911

这个都是最常见的提交步骤。

2. 推送代码到远程仓库

推送代码的时候一定要拉取最新的代码

git pull        # 先拉取最新代码
或
git pull origin dev        # 先拉取最新代码

如果按照上面已经设置了分支,可以直接进行 push

git push

或者可以指定分支进行代码提交

git push origin <分支名>

image-20251013221954691

image-20251013222144752

这样就提交好了。

3. 推送所有分支(扩展)
git push --all origin

三、修改提交备注

如果代码提交了,但是发现自己的备注写错了怎么办呢?可以使用以下几种方式进行解决。

情况一:刚提交,还未推送到远程(最简单)

使用 --amend 修改最后一次提交的备注:

git commit --amend -m "新的正确备注"

示例:

备注写错了两个字

image-20251013223215909

发现写错,修正为:

image-20251013223358732

注意:

  • 只能修改最后一次提交。
  • 如果已经 push 过,后续需要强制推送(见情况二)。

情况二:已推送到远程仓库

如果你已经执行过 git push,修改后需要强制推送

# 1. 修改最后一次提交的备注
git commit --amend -m "正确的备注"
# 2. 强制推送到远程(谨慎操作!)
git push --force-with-lease origin <分支名>

示例:

image-20251013223828790

推荐使用 --force-with-lease 而不是 --force,更安全,避免覆盖他人提交。


情况三:修改更早的某次提交备注(历史提交)

需要使用交互式 rebase:

# 查看最近3次提交,选择要修改的
git rebase -i HEAD~3
// 或者 直接输入当前已经提交的 版本id
git rebase -i 

在弹出的编辑器中:

  1. 找到你要修改备注的那行,把 pick 改成 reword
  2. 保存退出
  3. Git 会打开编辑器让你输入新的备注

修改完成后,如果已推送到远程,仍需:

git push --force-with-lease

⚠️ 警告:修改历史提交会影响协作

不建议使用 git push --force 你没有拉取最新代码,直接执行,有可能会覆盖掉代码。

git push --force-with-lease 会做一件事:“我本地认为远程分支应该是什么状态?如果不是,就拒绝推送。”

--force-with-lease 会检测到这个不一致,拒绝你的推送,提醒你先拉取合并。

命令类比
git push --force“不管别人有没有改,我直接覆盖!” ⚠️ 危险
git push --force-with-lease“如果我没落后于远程,我才允许覆盖。” ✅ 更安全

举个例子

先看git提交记录,使用 git log 命令,或者 工具都行

image-20251013224350258

然后执行 git rebase -i HEAD~3 命令

image-20251013224156273

现在提交了两次记录

PICK 18d2459 打开等待时间
pick 0c0a7fc 增加备注2

假如现在要修改第一次提交的记录

输入 i 然后进入编辑模式,找到修改备注的这一行,把 pick 改成 reword

image-20251013230137393

然后 wq! 保存

会有一个弹框出现

image-20251013230154065

修改完成后,保存,仍需:

git push --force-with-lease origin dev

image-20251013230311313

可以上git看查

image-20251013230346211

已经修改成功。

建议:写 commit message 时认真一点,遵循清晰、简洁、有意义的原则。

四、撤销提交记录

1. 撤销最近一次提交(保留更改到暂存区)

如果你想撤销最近一次提交,但保留所做的修改(文件在暂存区,可以再次提交),使用:

git reset --soft HEAD~1
  • HEAD~1 表示当前提交的前一个提交。
  • --soft 会保留修改在暂存区。

适用场景:提交了错误的 commit message 或想把更改合并到下一次提交中。


2. 撤销最近一次提交(保留更改到工作区)

如果你想撤销提交,并把修改带回工作区(需要重新 git add),使用:

git reset HEAD~1
# 或者
git reset --mixed HEAD~1
  • --mixed 是默认模式,修改会保留在工作目录中,但不会暂存。

适用场景:想重新编辑文件后再提交。


3. 彻底删除最近一次提交(危险!

如果你想完全删除最近一次提交及其所有更改(不可恢复),使用:

git reset --hard HEAD~1

⚠️ 警告:这会永久删除你最近一次提交的更改,请确保你不再需要这些内容。

适用场景:提交了敏感信息或临时测试代码,且不希望保留任何痕迹。


4. 创建一个“反向提交”来撤销(推荐用于已推送到远程的提交)

如果你已经将提交推送到远程仓库,不要使用 reset,因为会重写历史,影响他人协作。

应该使用 revert 命令,它会创建一个新的提交来“抵消”之前的更改:

git revert HEAD
  • 这会生成一个新提交,内容是把最后一次提交的更改“反过来”。
  • 安全,适合团队协作。

例如:你提交中添加了一行代码,revert 会生成一个删除该行的提交。


5. 撤销更早的某次提交

如果你想撤销更早的某个提交(不是最近的),使用:

git revert <commit-hash>
  • <commit-hash> 是你想撤销的那个提交的哈希值(如 a1b2c3d)。

Git 会创建一个新提交来抵消那次更改。


6. 强制推送到远程(仅在必要时)

如果你使用了 reset 修改了本地历史,并且想同步到远程仓库,需要强制推送:

git push --force-with-lease origin <branch-name>

⚠️ 警告:这会改写远程历史,仅在你确定没有其他人基于这些提交工作时使用


7. 实战举例

1. 撤销最近一次提交的记录

在这里插入图片描述
执行撤销命令

git reset --soft HEAD~1

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

但是这时候我们发现会提示这个
在这里插入图片描述
这时候需要强制推送一次

git push --force-with-lease

在这里插入图片描述
这会儿就不会报错了。当然你可以重新add 然后强制推送。但是注意,一定要关注团队的提交记录,不要覆盖掉代码。

2. 撤销远端一次提交的记录

我们现在要回退这个提交记录
在这里插入图片描述
在这里插入图片描述

总结:

场景推荐命令
撤销最近提交,保留修改用于重新提交git reset --soft HEAD~1
撤销提交,修改回到工作区git reset HEAD~1
彻底删除提交和更改git reset --hard HEAD~1(慎用)
已推送到远程,想安全撤销git revert HEAD
撤销历史中的某次提交git revert <commit-hash>

篇幅二马上发布,主要是版本合并,如何合并代码冲突。

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

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

相关文章

@PropertySource@ImportResource@Bean

一、核心定义与基础用法1. Value 注解Value 是 Spring 中用于零散地、直接地注入单个配置值的注解&#xff0c;支持 SpEL 表达式&#xff08;Spring 表达式语言&#xff09;&#xff0c;通常作用在字段、方法参数或构造器参数上。java运行Component public class ValueDemo {//…

SpringBoot中多配置文件和外部配置文件加载顺序

一、项目基础信息1. 项目结构基于 Maven 构建的 Spring Boot 项目&#xff0c;核心依赖包含 web、validation、devtools 等&#xff1a;JDK 版本&#xff1a;17Spring Boot 版本&#xff1a;3.2.02. 核心 POM 配置xml<project xmlns"http://maven.apache.org/POM/4.0.0…

Spring Boot 配置文件核心用法与加载优先级

一、多配置文件的核心用法Spring Boot 采用「主配置文件 环境专属配置文件」的模式管理多环境配置&#xff0c;核心规则如下&#xff1a;1. 配置文件命名规范Spring Boot 默认识别 .properties / .yml/.yaml 两种格式&#xff0c;命名需遵循以下规则&#xff1a;配置文件类型命…

Week 34: 量子深度学习入门:从 Neural ODE 到哈密顿量子演化

文章目录 Week 34: 量子深度学习入门&#xff1a;从 Neural ODE 到哈密顿量子演化摘要Abstract1. ResNet的连续极限1.1 从离散层到连续流1.2 伴随敏感度法 2. 非均匀时序建模2.1 场景2.2 ODE-RNN 3. 跨越边界&#xff1a;哈密顿量与量子可能性3.1 物理守恒与哈密顿网络 (HNN)3.…

什么是“同余数问题(千年数学难题)”?

“同余数问题”&#xff08;Congruent Number Problem&#xff09;是数论中一个历史悠久、表述简单但深刻且尚未完全解决的著名问题。尽管它不是克雷数学研究所&#xff08;Clay Mathematics Institute&#xff09;官方列出的七个“千禧年大奖难题”之一&#xff0c;但由于其与…

Vue3+Node.js实现文件上传并发控制与安全防线 进阶篇

上一篇我们实现了最基础的 FormData 上传&#xff0c;体会了前后端的基础联调。但如果在面试中被问到&#xff1a;“如果用户上传了一个 10GB 的文件怎么办&#xff1f;”或者“用户同时选了 100 张图片&#xff0c;浏览器卡死怎么办&#xff1f;”这就需要用到进度监听、双端校…

大厂迷思:为什么顶级工程师会产出难以维护的代码

当你终于通过几轮严苛的技术面试&#xff0c;加入一家享有盛誉的大型科技公司时&#xff0c;往往会对即将接触的代码库抱有极高的期待。你想象着整洁的架构、清晰的文档以及如教科书般完美的逻辑实现。然而现实往往极具冲击力&#xff1a;你所看到的可能是一个由无数补丁堆叠、…

menset的使用方法

menset的使用方法#include <cstring> // 必须包含这个头文件&#xff01; memset(目标内存地址, 填充值, 填充的字节数);填充值只能是「单字节值」memset是按字节填充&#xff0c;所以&#xff1a;✅ 填充0&#xff1a;完全没问题&#xff08;所有类型数组清空都能用&am…

“AUTOSAR?我连CAN都看不懂…” 一个汽车电子工程师的坦白与指南

我刚入职现时&#xff0c;导师指着电脑上复杂的网络拓扑图说&#xff1a;“这个ECU的AUTOSAR架构需要优化。” 我表面点头&#xff0c;手心却在冒汗——获取车软嵌入式&#xff0c;欢迎可&#xff1a;AutoButo。那些分层框图像天书&#xff0c;MCAL、BSW、RTE这些缩写&#xff…

大数据领域数据中台的安全审计与合规

大数据领域数据中台的安全审计与合规 关键词:大数据、数据中台、安全审计、合规、数据安全 摘要:本文聚焦于大数据领域数据中台的安全审计与合规问题。随着大数据技术的迅猛发展,数据中台成为企业整合和管理数据的重要平台。然而,其安全与合规性面临诸多挑战。文章首先介绍…

数据结构01——时间复杂度和空间复杂度

一.什么是数据结构数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在⼀种或多种特定关系的数据集合。不存在一种通用的数据结构针对于所有应用场景&#xff0c;所以产生了多种多样的数据结构来适配不同的环境&#xff1a;例如顺序表、链表、堆栈…

Java中strip与trim()的区别

TOC Java中strip与trim()的区别 jdk11及以上版本&#xff0c;java的String支持strip()方法&#xff0c;那么原来的删除空白trim()与strip()的区别时什么&#xff1f; 区别 trim()&#xff1a;仅处理字符串首尾的ASCII空白字符串&#xff08;小于等于\u0020字符&#xff0c;…

Python入门——字符串

Python快速入门&#xff08;1&#xff09;——字符串字符串索引访问常用倒序访问截取/切片常用方法长度判空大小写删除空白分割最近需要使用到python&#xff0c;本系列适合有其他编程语言&#xff08;C/C/Java&#xff09;基础的同学&#xff0c;帮助大家一起快速上手Python&a…

多级缓存必要性

Java多级缓存设计&#xff1a;应对微博明星官宣的高并发场景 一、多级缓存原理与必要性 1.1 为什么需要多级缓存&#xff1f; 单级缓存的问题&#xff1a; 性能瓶颈&#xff1a;所有请求都打到同一缓存层&#xff0c;压力集中容错性差&#xff1a;缓存层故障直接影响整体可…

OpenHarmony Flutter 分布式安全防护:跨设备身份认证与数据加密传输方案 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

tp3.2性能暂时优化调整

// 1. 禁用TP3.2的冗余组件(在入口文件index.php最顶部添加)define(APP_DEBUG, false); // 关闭调试模式(必须)define(BIND_MODULE,Api); // 绑定模块,减少模块扫描define(THINK_PATH, __DIR__./ThinkPHP/);// 禁…

百万数据报表操作 - 努力-

百万数据报表操作百万数据报表操作,Excel报表一、百万数据报表概述 1.1 百万数据报表概述 我们都知道Excel可以分为早期的Excel2003版本(使用POI的HSSF对象操作)和Excel2007版本(使用POI的XSSF操作),两者对百万数…

电商系统-下单功能 - 努力-

电商系统-下单功能电商系统-下单功能,SpringCloud一、 订单结算页 本文介绍:订单结算页,用户地址列表,支付方式选择,用户商品清单,生成订单 ,分布式ID,库存扣减,增加用户积分业务功能。 1.1 订单结算页 用户收货…

软件测试—即时通讯测试方法

一、即时通讯实现方式 1.短轮询&#xff08;Short Polling&#xff09; 短轮询是一种客户端定期向服务器发送HTTP请求以检查是否有新数据的简单技术。无论服务器是否有新数据&#xff0c;客户端都会在固定的时间间隔后再次请求。 实现机制 客户端向服务器发送HTTP请求&#xff…

告别if-else噩梦:流程编排技术

作为一个优秀的程序员&#xff0c;要守住职业的底线。能简单快速的完成的一件事&#xff0c;就一定要用简单的方案快速完成。不可过度的设计&#xff0c;始终保持系统的简洁&#xff01; 曾几何时&#xff0c;我对于流程编排这件事 嗤之以鼻&#xff0c;为什么呢&#xff1f;我…