Git操作技巧(一)
前言
仓库代码目前主流使用的是git。工作中多年使用,有一些高效编码技巧总结下。
具体说明
- 仓库代码同步优先使用rebase模式
请参考《最佳git同步代码的方式rebase》
rebase方式的好处是git记录是直线,抛弃了单个PR的git 记录,log简洁。 - 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
能打的打补丁,有冲突的提示。需要手工解决冲突。
- git add时忽略固定文件或文件夹
对于经常使用vscode人来讲,工程目录下会自动生成.vscode目录,或仓库中存在非受控文件夹/文件,暂时不能清理的情况。
修改.gitignore文件不是最好的方法。如果该文件本身就是受控的,更不能修改。
全局配置:
git config --global core.excludesfile '~/.gitignore_global'
echo ".vscode/" >> ~/.gitignore_global
说明:可以使用git add . 将所有改动文件加入暂存区。不用该考虑是否过滤不需要的文件夹或文件。不需要reboot。直接生效。全局配置,所有git管控仓库均受用。
- 获取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
- 丢弃/删除已提交/已修改的代码
- 删除所有未跟踪的文件和文件夹: 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