git使用技巧

2025-3-30|2025-3-30
FollyCoolly
FollyCoolly
type
status
date
slug
summary
tags
category
icon
password

实用操作

分支查看

根据 commit 创建新分支

git switch -c <new_branch_name> <commit_id>

git stash 相关

git stash 用于临时存储当前的工作区修改,让你可以切换分支或执行其他操作,而不必提交这些修改。

git show 相关

git show 主要用于查看 Git 对象的详细信息,比如提交记录、分支、标签、文件修改内容等。比 git log 更详细,比 git diff 更综合。
git show 默认显示:
  • 提交哈希(commit ID)
  • 作者信息
  • 提交日期
  • 提交信息(commit message)
  • 修改的文件及其具体内容
示例:

忽略对某些文件的更改(不使用.gitignore)

git update-index --assume-unchanged 用于告诉 Git 忽略本地对某个文件的修改,但不会真正修改 .gitignore 或 Git 的跟踪状态。

使用场景

  • 本地配置文件(如 config.json),你修改了但不想提交
  • 性能优化(减少 Git 检测变更的开销,提高大项目速度)
  • 临时忽略文件修改,但仍然保持 Git 版本库的干净状态

用法

assume-unchanged vs .gitignore

方法
作用
适用场景
.gitignore
永久忽略文件,不会被 Git 追踪
不想让 Git 追踪文件,如日志、编译产物
assume-unchanged
只忽略本地修改,但文件仍在 Git 版本库
配置文件、临时修改、优化性能
区别
  • .gitignore 适用于文件从未被 Git 追踪
  • assume-unchanged 适用于文件已在 Git 版本库中,但你想暂时忽略修改

git checkout 与 switch 和 restore

Git 2.23 之后,git checkout 被拆分为:
操作
推荐命令
git checkout 命令
切换分支
git switch <分支>
git checkout <分支>
创建并切换新分支
git switch -c <分支>
git checkout -b <分支>
恢复文件
git restore <文件>
git checkout -- <文件>
检出旧版本
git checkout <commit>
git checkout <commit>

git restore

Git 2.23 引入了 git restore 命令,它主要用于恢复文件状态,是 git checkout -- <file> 的替代方案,语法更加清晰。
git restore 主要用于:
  • 丢弃未提交的本地修改
  • 从暂存区恢复文件
  • 从某个提交恢复文件

git switch

git switch 主要用于切换和创建分支,比 checkout 语义更清晰、操作更安全。

Git 原理

git add 底层实现

git add之后,.git/object中会产生新的文件,可以通过git cat-file指令查看其中的文件,这里文件是根据add的文件的内容(-p)和类型(-t)和大小(-s)产生的,并且不考虑add 的文件的文件名。例如,如果有两个txt文件,其文件名不一样,而内容一样,将它们都add之后,只会多出一个object文件。具体的产生方法为,文件类型+文件内容长度+\+文件内容进行哈希(如,类似于echo "blob 10\0 hello git" | shasum),得到object文件名,object文件内容则是原文件文件类型+文件内容长度+\+文件内容

tree

Git 中,tree(树)是文件夹的表示方式,它存储的是文件及子目录的引用,而不是文件的内容。Git 使用 tree 来组织 blob(文件对象),从而构建整个代码仓库的目录结构。
Git 中,文件夹不会有对应的对象,而新增空文件夹也不会改变git status。但是tree是按照文件夹结构,以树状形式产生的。

分支

分支(branch)是指向commit的有名字的指针。
HEAD是一个特殊的指针,它和当前活跃的branch关联,总是指向最新的commit
也可以将HEAD指向某个之前的commit
 
学习或待学习的一些视频和文章(2025年)浅谈C++标准库智能指针的deleter
Loading...