Git操作技巧(一)

发布于:2025-07-13 ⋅ 阅读:(14) ⋅ 点赞:(0)

前言

仓库代码目前主流使用的是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
* master
  test
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告警清理enternal
    Merge 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

网站公告

今日签到

点亮在社区的每一天
去签到