分类 随笔 下的文章

以下是 Git 的常用命令分类整理,覆盖日常开发中的核心操作场景:


一、仓库初始化与克隆

  1. git init
    初始化本地 Git 仓库,生成 .git 目录。

    git init
  2. git clone <url>
    克隆远程仓库到本地,支持 SSH/HTTPS 协议。

    git clone https://github.com/user/repo.git

二、提交与同步

  1. git add
    将文件添加到暂存区(Staging Area)。

    git add .           # 添加所有修改
    git add file.txt    # 添加单个文件
  2. git commit
    提交暂存区的修改到本地仓库。

    git commit -m "提交说明"    # 常规提交
    git commit -am "快速提交"   # 跳过暂存,直接提交跟踪过的文件
  3. git push
    推送本地提交到远程仓库。

    git push origin main
  4. git pull
    拉取远程仓库最新代码并合并到当前分支(相当于 git fetch + git merge)。

    git pull origin main
  5. git fetch
    仅下载远程仓库的更新,不自动合并(需手动 git merge)。

    git fetch --all

三、分支管理

  1. git branch
    查看、创建或删除分支。

    git branch               # 列出本地分支
    git branch -a            # 列出所有分支(本地+远程)
    git branch new-feature   # 创建新分支
    git branch -d old-branch # 删除分支
  2. git checkout
    切换分支或恢复文件。

    git checkout main        # 切换到 main 分支
    git checkout -b dev      # 创建并切换到 dev 分支
  3. git merge
    合并指定分支到当前分支。

    git merge dev          # 将 dev 分支合并到当前分支

四、状态与差异

  1. git status
    查看工作区和暂存区的文件状态。

    git status
  2. git diff
    比较文件修改内容。

    git diff             # 比较工作区与暂存区
    git diff --staged    # 比较暂存区与最新提交
    git diff HEAD~1      # 比较当前与上一次提交

五、撤销与恢复

  1. git reset
    撤销提交或取消暂存。

    git reset HEAD~1         # 回退到上一次提交(保留修改)
    git reset --hard HEAD~1  # 强制回退并丢弃修改
  2. git restore
    恢复文件到指定状态(Git 2.23+ 新增)。

    git restore file.txt      # 恢复工作区文件到最近提交
    git restore --staged file.txt # 取消暂存
  3. git stash
    临时保存未提交的修改。

    git stash          # 暂存当前修改
    git stash pop      # 恢复最近一次暂存的修改

六、历史与标签

  1. git log
    查看提交历史。

    git log --oneline    # 简洁模式
    git log --graph      # 图形化分支历史
  2. git tag
    管理版本标签。

    git tag v1.0.0       # 创建标签
    git push --tags      # 推送所有标签到远程

七、远程仓库

  1. git remote
    管理远程仓库关联。

    git remote -v         # 查看关联的远程仓库
    git remote add origin <url>  # 添加远程仓库

常用场景示例


以上命令覆盖了 Git 日常使用的 90% 场景。如需更详细操作(如 git rebasegit cherry-pick 等),可参考 Git 官方文档或相关教程 11(https://www.cnblogs.com/kenshinobiy/p/4543976.html)23(https://blog.csdn.net/m0_45234510/article/details/120181503)

宝塔续签证书,出现旧的或者已经删除的域名,导致续签失败

解决方法:宝塔目录找到/www/server/panel/class下的acme_v2.py文件59-61行zuo

_dnsapi_file = 'config/dns_api.json'
_save_path = 'vhost/letsencrypt'
_conf_file = 'config/letsencrypt.json'

根据这三个地址找文件,根本解决方案在/www/server/panel/config/letsencrypt.json文件,也就是第三个,找到

"auth_type": "http", "domains": ["错误的域名.net", ...其他域名], 

删除掉错误域名保存重新续签即可

React 提供了一系列的 Hook,允许你在函数组件中使用状态和其他 React 特性,而无需编写类组件。以下是一些常用的 React Hook:

  1. useState:用于在函数组件中添加状态。它让你能够拥有可变状态和副作用。

    const [state, setState] = useState(initialState);
  2. useEffect:用于在函数组件中执行副作用操作。它可以模拟生命周期方法,如 componentDidMountcomponentDidUpdatecomponentWillUnmount

    useEffect(() => {
      // 副作用逻辑
      return () => {
        // 可选的清理逻辑
      };
    }, dependencies); // 依赖数组
  3. useContext:允许你订阅 context,这样在组件树渲染时,任何 context 的变化都可以被组件感知到。

    const contextValue = useContext(MyContext);
  4. useReducer:当你需要更复杂的状态逻辑时,可以使用 useReducer 来代替 useState。它接收一个 reducer 函数和初始状态,并返回当前状态和一个 dispatch 函数。

    const [state, dispatch] = useReducer(reducer, initialState);
  5. useMemo:用于执行记忆化的计算。只有当依赖项变化时,才会重新计算。

    const memoizedValue = useMemo(() => expensiveComputation(a, b), [a, b]);
  6. useCallback:返回一个 memoized 的回调函数,只有当依赖项变化时,回调函数才会更新。

    const memoizedCallback = useCallback(() => {
      // 回调逻辑
    }, [dependency1, dependency2]);
  7. useRef:创建一个可变的 ref 对象,其 .current 属性被保留在组件的整个生命周期中。

    const refContainer = useRef(initialValue);
  8. useImperativeHandle:当你使用 forwardRef 将 ref 传递到可转发的组件时,你可以使用 useImperativeHandle 来自定义暴露给父组件的 ref 对象。

    useImperativeHandle(ref, () => ({
      // 暴露给父组件的 API
    }));
  9. useLayoutEffect:与 useEffect 类似,但它会在所有的 DOM 变更之后同步触发。这对于需要在浏览器绘制前执行的 DOM 读取操作是必要的。

    useLayoutEffect(() => {
      // 副作用逻辑
    }, dependencies);
  10. useDebugValue:这个 Hook 可以在 React 开发者工具中显示标签,帮助你调试 Hook。

    useDebugValue(value);
  11. useTransition:用于控制状态变化时的性能优化,它可以延迟状态更新引起的渲染。

    const [startTransition, isPending] = useTransition({
      timeoutMs: 3000,
    });
  12. useDeferredValue:允许你在异步渲染期间使用之前渲染的值,而不是等待当前渲染的值。

    const deferredValue = useDeferredValue(value, { timeoutMs: 3000 });
  13. useId:创建一个唯一的 ID,可以用于 DOM 元素的属性。

    const id = useId();
  14. useInsertionEffect:与 useEffect 类似,但它会在组件插入到 DOM 后触发,而不是在每次渲染后。

    useInsertionEffect(() => {
      // 副作用逻辑
    }, dependencies);
  15. useAnimation:用于动画化值,它提供了一个声明式 API 来控制动画。

    const [animatedValue, setAnimatedValue] = useAnimation();

这些 Hook 使得函数组件可以处理原本需要类组件来实现的复杂交互和状态逻辑。通过组合使用这些 Hook,你可以构建功能丰富且高效的组件。

linux查找文件夹中全部特定日期的文件

在Linux中,你可以使用find命令结合-newermt和-not -newermt测试来查找特定日期的文件。这里是一个例子,假设你想找到在特定日期2023-04-01创建或修改的所有文件:

find /path/to/folder -newermt '2023-04-01' ! -newermt '2023-04-02'

这个命令会找出在2023-04-01当天创建或修改的所有文件,但不包括2023-04-02之前的文件。

解释:

/path/to/folder 是你想要搜索的目标文件夹路径。

-newermt '2023-04-01' 查找修改时间在给定日期之后的文件。

! -newermt '2023-04-02' 排除在给定日期之后的文件,这里是2023-04-02,从而只保留在2023-04-01当天的文件。

确保你的find命令支持-newermt参数。如果不支持,你可能需要使用-newer和-mtime参数的组合来实现类似的功能。

可能由于package.json中使用的依赖不兼容,导致的
npm i --force
或npm i --legacy-peer-deps

但是因为这是强制或者忽略安装的,可能会导致项目在运行时会出现问题