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

Git操作技巧(一)

前言

仓库代码目前主流使用的是git。工作中多年使用,有一些高效编码技巧总结下。

具体说明

  1. 仓库代码同步优先使用rebase模式
    请参考《最佳git同步代码的方式rebase》
    rebase方式的好处是git记录是直线,抛弃了单个PR的git 记录,log简洁。
  2. git diff/patch代码迁移
    patch和diff的区别:
  • diff文件:git diff命令生成的.diff文件仅记录文件改变的内容,而不包含commit记录信息。多个commit可以合并成一个diff文件。这种文件通常用于记录代码更改的详细信息,方便查看和比对。适用于在同一个仓库内部代码迁移。
  • patch文件:git format-patch命令生成的.patch文件不仅记录文件改变的内容,还包含commit记录信息。每个commit对应一个patch文件。这种文件通常用于保存和传输代码的更改,方便在不同的代码库之间迁移和合并。

可以参考《Git Patch 使用详解:生成、应用与多提交合并导出》
git diff我用的比较多。常用做法:

  • 创建当前仓库的diff: 工程根目录执行git diff > xxxx.diff
    如果当前仓库有新增文件或文件夹,请首先执行git add . ,将所有改动文件受控,再执行diff创建。
  • 应用diff:
    方式一:
git apply --check xxxx.diff
git apply xxxx.diff 

仅仅是应用检查,本地代码无任何改变。推荐。多执行一步,可以避免很多麻烦。
方式二:

get apply --reject xxxx.diff

能打的打补丁,有冲突的提示。需要手工解决冲突。

  1. git add时忽略固定文件或文件夹

对于经常使用vscode人来讲,工程目录下会自动生成.vscode目录,或仓库中存在非受控文件夹/文件,暂时不能清理的情况。
修改.gitignore文件不是最好的方法。如果该文件本身就是受控的,更不能修改。
全局配置:

git config --global core.excludesfile '~/.gitignore_global'
echo ".vscode/" >> ~/.gitignore_global

说明:可以使用git add . 将所有改动文件加入暂存区。不用该考虑是否过滤不需要的文件夹或文件。不需要reboot。直接生效。全局配置,所有git管控仓库均受用。

  1. 获取git最新提交的commit ID
git log master -1 --format="%H"  # 可以替换master为任何分支

git rev-parse master # 请替换你需要的分支名称

效果:

root@1b0695311d6f:/home/openharmony/drivers/external_device_manager# git branch
* mastertest
root@1b0695311d6f:/home/openharmony/drivers/external_device_manager# git log master -1 --format="%H"
6452e365fd58cb9d43cf88d3f70607dc14489878
root@1b0695311d6f:/home/openharmony/drivers/external_device_manager# git rev-parse master
6452e365fd58cb9d43cf88d3f70607dc14489878
root@1b0695311d6f:/home/openharmony/drivers/external_device_manager# git log -2
commit 6452e365fd58cb9d43cf88d3f70607dc14489878 (HEAD -> master)
Author: niuma <niuma@xxxx.com>
Date:   Fri Jun 27 10:29:57 2025 +0800外设故障提醒框架能力之二:主体功能代码Signed-off-by: niuma <niuma@xxxx.com>commit 9fe11a39a89fff2111bc1b685517da4aac7fcfa2 (origin/weekly_20250630, origin/OpenHarmony_feature_20250702)
Merge: 84807fe 366badd
Author: openharmony_ci <120357966@qq.com>
Date:   Mon Jun 23 03:23:44 2025 +0000!361 5.1.1告警清理enternalMerge pull request !361 from wanghongenaf/master
  1. 丢弃/删除已提交/已修改的代码
  • 删除所有未跟踪的文件和文件夹: git clean -fd
  • 软撤销本地最后一次commit(撤销commit, 保留修改): git reset --soft HEAD~1
  • 硬撤销本地最后一次commit(撤销commit,丢弃修改): git reset --hard HEAD~1
  • 撤销本地已经add的某个文件:git reset <file_name>
  • 取消本地所有add的文件状态不保留修改: git reset
http://www.dtcms.com/a/272808.html

相关文章:

  • shell学习从入门到精通
  • 数据仓库:企业数据管理的核心枢纽
  • 创客匠人视角:从信任经济看创始人 IP 如何重塑 IP 变现逻辑
  • nmap扫描指定网段中指定开放端口的主机(IP,mac地址)
  • 量子计算系统软件:让“脆弱”的量子计算机真正可用
  • 有什么好使用的内网ip映射软件?可以让家庭/公司网络局域网端口,让公网互联网跨网访问
  • Spring boot整合dubbo+zookeeper
  • 26-计组-外存
  • 基于云端EC2的O3DE机器人仿真环境搭建指南
  • python自动化面试问题——关于python
  • 029_构造器重载与默认构造器
  • 【报错】Could not find a package configuration file provided by ‘glog’”
  • “Datawhale AI夏令营”基于带货视频评论的用户洞察挑战赛
  • 使用Tensorflow和CNN进行猫狗图片训练的实战总结
  • P1722 矩阵 II 题解 DFS深度优先遍历与卡特兰数(Catalan number)解
  • Spring Boot+Redis+Caffeine 二级缓存架构的终极实现方案、包含万级QPS下的黄金配置参数、全文超过2500字(博君一赞)
  • XGBoosting算法详解(Boosting思想的代表算法)
  • C语言<数据结构-链表>
  • LangChain RAG 实战
  • Transformers 和 PyTorch 的区别与安装指南
  • Docker 高级管理--Dockerfile镜像制作
  • Context Engineering Framework 系统详细介绍
  • 链表算法之【合并两个有序链表】
  • 牛客笔试题 除2!
  • 读取按键的四种方式
  • IMU误差模型
  • 显卡GPU的架构和工作原理
  • 输入框过滤选项列表,el-checkbox-group单选
  • JDK 1.7 vs JDK 1.8
  • 为什么域名加端口访问需要放行端口?