lotus 切换到某个 commit

本文详细介绍了如何使用git工具进行Lotus项目的版本回退,包括如何切换到特定的commit,以及如何通过git checkout和git reset命令回退到历史版本。文章提供了具体的git命令示例,如git show、git checkout和git merge等,帮助读者理解并实践Lotus版本的回退流程。

lotus 切换到某个 commit

1,lotus版本回退

在这里插入图片描述

  • 回退到 #1157
# git show
commit b42e4816007c34ea505f0f60b3b4577f5727ed5c (HEAD -> master, origin/master, origin/HEAD)
Merge: 7f9a3ac5 e5a48800
Author: ?ukasz Magiera <magik6k@users.noreply.github.com>
Date:   Thu Jan 30 08:18:49 2020 +0100

    Merge pull request #1182 from zhy2006/master
    
    fix:a bug of the power percentage in lotus-storage-miner info

# git checkout 2841edfb96c0ecf472a90457f1594acccc70d328
注意:正在检出 '2841edfb96c0ecf472a90457f1594acccc70d328'。

您正处于分离头指针状态。您可以查看、做试验性的修改及提交,并且您可以通过另外
的检出分支操作丢弃在这个状态下所做的任何提交。

如果您想要通过创建分支来保留在此状态下所做的提交,您可以通过在检出命令添加
参数 -b 来实现(现在或稍后)。例如:

  git checkout -b <新分支名>

HEAD 目前位于 2841edfb Merge pull request #1157 from filecoin-project/feat/cli/stategetdeal

# git show
commit 2841edfb96c0ecf472a90457f1594acccc70d328 (HEAD)
Merge: 7b258edd c0e317f8
Author: Whyrusleeping <why@ipfs.io>
Date:   Sat Jan 25 10:17:49 2020 -0800

    Merge pull request #1157 from filecoin-project/feat/cli/stategetdeal
    
    cli: state get-deal


  • 切换到 #1168
# git checkout b60860456db4ddc9e4e8e0fbb9fc4ec1be706140
之前的 HEAD 位置是 2841edfb Merge pull request #1157 from filecoin-project/feat/cli/stategetdeal
HEAD 目前位于 b6086045 Merge pull request #1168 from filecoin-project/bugs/invalid-state-transition

# git show
commit b60860456db4ddc9e4e8e0fbb9fc4ec1be706140 (HEAD)
Merge: 095a309a 1cdf2924
Author: Łukasz Magiera <magik6k@users.noreply.github.com>
Date:   Tue Jan 28 23:32:42 2020 +0100

    Merge pull request #1168 from filecoin-project/bugs/invalid-state-transition
    
    planCommitting must handle SectorCommitFailed

参考:
1,使用git checkout和git reset回退到历史版本

当然可以!**Git 完全支持切换到某个特定的 commit,然后基于该 commit 编译代码**。这在嵌入式开发、OpenWrt 定制、版本回退、Bug 复现等场景中非常常见。 --- ## ✅ 步骤详解:如何切换到某个 commit 并编译 ### 1. 查看历史提交记录(找到目标 commit) ```bash git log --oneline -10 ``` 输出示例: ```text a1b2c3d (HEAD -> master) Fix memory leak in tddpUtil e4f5g6h Add UCI support for network config i7j8k9l Update build script for MStar platform ... ``` 记下你想切换到的 commit ID,比如 `e4f5g6h`。 --- ### 2. 切换到指定 commit(进入“分离头指针”状态) ```bash git checkout e4f5g6h ``` 此时你会看到提示: ```text Note: checking out 'e4f5g6h'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, but they won't be part of any branch unless you check out a branch first. ``` 这意味着你已经成功切换到了这个历史版本。 > 🔍 此时所有文件都会恢复成那个 commit 时的状态,包括 Makefile、源码、配置等。 --- ### 3. 确认当前状态 ```bash git status # 输出类似: # HEAD detached at e4f5g6h ``` 你可以用以下命令确认代码确实是你要的版本: ```bash cat some_file.c ls package/libs/libuci # 检查是否存在 ``` --- ### 4. 编译项目(例如 OpenWrt) ```bash make defconfig make package/your-package/compile V=s ``` ✅ 此时编译的就是 **那个 commit 对应的代码版本**。 --- ## 🛠️ 进阶技巧 ### ✅ 方法一:创建临时分支(推荐用于长期调试) 如果你要在该 commit 上做修改或多次编译,建议创建一个本地分支: ```bash git checkout -b debug-uci-support e4f5g6h ``` 这样你就不再处于 “detached HEAD” 状态,可以安全提交更改。 --- ### ✅ 方法二:使用 `git reset --hard` 回退整个工作区 如果你想永久回退到某个 commit,并继续在这个基础上开发: ```bash git reset --hard e4f5g6h ``` ⚠️ 警告:这会丢弃之后的所有提交,请谨慎使用。 --- ### ✅ 方法三:只检出某个子目录的内容(不改变 HEAD) 如果你想保留当前 HEAD,但只想从某个旧 commit 恢复个别文件: ```bash git checkout e4f5g6h -- package/libs/libuci ``` 这只会把 `libuci` 目录恢复到那个版本,不影响其他代码。 --- ## 💡 实际应用场景举例 | 场景 | 操作 | |------|------| | SDK 缺少 `libuci` | 找官方 OpenWrt 的某个 tag(如 `v22.03.5`),checkout 后复制 `package/libs/libuci` 过来 | | 编译失败?怀疑是最近改动导致 | `git checkout HEAD~3` 回退几个提交试试能否编译通过 | | 复现客户报告的 Bug | 客户用的是 commit `a1b2c3d`,你直接 checkout 它来复现环境 | --- ## ✅ 示例:从 OpenWrt 官方仓库获取 libuci 并切换到稳定版本 ```bash # 克隆官方仓库 git clone https://git.openwrt.org/openwrt/openwrt.git openwrt-official # 进入并切换到 OpenWrt 22.03.5 版本(稳定版) cd openwrt-official git checkout v22.03.5 # 复制 libuci 到你的项目 cp -r package/libs/libuci ~/nvr_2025_first/torchlight/package/libs/ ``` 然后再回到你的项目编译: ```bash cd ~/nvr_2025_first/torchlight make defconfig make package/libs/libuci/compile V=s ``` --- ## ❗ 注意事项 | 事项 | 说明 | |------|------| | ✅ 编译依赖也要一致 | 如果那个 commit 依赖旧版工具链或内核,可能需要清理 `.config` | | ✅ 清理缓存 | 建议每次切换后运行 `make clean` 或 `make dirclean` 避免残留对象 | | ✅ staging_dir 可能污染 | 不同 commit 使用不同头文件,建议删除 `staging_dir` 后重新编译 | ```bash rm -rf staging_dir # 强制刷新头文件和库路径 make defconfig make package/libs/libuci/compile ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值