常用命令

一、仓库初始化与克隆

初始化本地仓库

cd my-project
 
git init
Link to original

克隆远程仓库到本地

# 克隆远程仓库到本地
git clone 远程仓库
# 克隆指定分支
git clone -b develop 远程仓库
Link to original

二、配置

config 配置

# 查看配置
git config --list
# 设置全局用户名+邮箱
git config --global user.name "your-name"
git config --global user.email your-email@qq.com
# 配置文件位置
# windows: ~/.gitconfig
# linux: /etc/gitconfig
# 设置代理
git config --global http.proxy 'http://localhost:7890'
# 具体项目的配置列表
git config --local --list
# 具体项目的配置
git config --local 配置内容
Link to original

三、日常 workflow:查看 → 添加 → 比较 → 提交

查看当前状态

git status
# 简洁版
git status -s

输出结果

?? new-file.txt   # 未跟踪
M  modified-file.js # 已修改未暂存
A  added-file.css  # 已暂存
Link to original

添加文件

# 添加单个文件
git add 文件1
# 添加多个文件
git add 文件1 文件2
# 添加文件夹
git add 文件夹
# 添加所有修改(包括新文件和修改的文件)
git add .
# 添加所有.js文件
git add *.js

git reset HEAD . 可以取消暂存

Link to original

工作区 vs 暂存区

# 查看工作区中已修改但未暂存的文件差异
git diff
Link to original

提交

# 将暂存区内容纳入Git提交记录
git commit -m "message"
# git add . 和 git commit -m "message" 合在一起
git commit -am "message"
Link to original

四、撤销与恢复

取消工作区的修改

# 将工作区中指定文件恢复到最新提交的状态(丢弃本地修改)
git restore 文件名
Link to original

撤销本地暂存

git reset HEAD .
Link to original

从暂存区移除文件

# 将文件从 Git 跟踪中移除,同时删除本地文件
git rm 文件名
Link to original

五、历史查看

历史:在 commit 信息中查找并展示 commit

git log --grep="待过滤信息"
Link to original

恢复本地已删除分支

# 查看所有操作记录,包括被删分支之前的 commit
git reflog
 
# 找到分支最后一次的 commit hash,例如:
# abc1234 HEAD@{2}: commit: fix bug xxx
 
# 用这个 hash 重建分支
git branch <分支> abc1234
 
# 或者直接切出来
git checkout -b <分支> abc1234
Link to original

六、分支管理

查看当前分支

# 查看当前分支
git branch
git branch --list
Link to original

Transclude of git-switch#切换分支

切换分支

# 切换分支
git switch 分支名
 
# 创建+切换分支
git checkout 分支名
 
# 创建并切换到 dev 分支
git checkout -b dev
Link to original

合并其他分支

# 将 master 合并到当前分支
git merge master
Link to original

暂存

# 当前暂存区的文件暂存
git stash
# 查看 stash 内容
git stash list
# 查看具体内容
git stash show t
# 应用
git apply
# 弹出
git pop
# 临时保存当前分支的工作状态,方便切换到其它分支
git stash
# 恢复刚刚临时保存的工作状态
git stash pop
Link to original

TLDR

 
# 将单个提交应用到当前分支:
 
    git cherry-pick 提交哈希
 
# 将连续多个提交应用到当前分支(也可参考 git rebase --onto):
 
    git cherry-pick 起始提交~..结束提交
 
# 将多个(非连续的)提交应用到当前分支:
 
    git cherry-pick 提交1 提交2 ...
 
# 将提交变更应用到工作区但不自动创建提交:
 
    git cherry-pick --no-commit 提交哈希
Link to original

七、远程交互

查看远程分支

git remote
git remote --verbose
Link to original

下载远程更新

# 从关联的远程仓库下载所有分支的最新状态
git fetch
Link to original

拉取并合并

# 从关联的远程分支拉取最新代码并自动合并到当前分支
git pull
Link to original

推送到远程

# 将当前分支的提交推送到关联的远程分支
git push
Link to original

八、高级操作

添加子模块

# 添加子模块
git submodule add [某个github仓库]
Link to original

稀疏检出

允许你只检出(checkout)某些目录或者文件,而不是仓库中的全部内容。 适合于大型仓库(如 Monorepo)——你只关心或需要工作区中的某个子目录或文件,而不是整个仓库。

场景:如果想对某个仓库提交代码,但是整个项目又太大,只想拉取其中的一部分,可以采用稀疏拉取方案

Link to original

FAQ

Git 如何恢复本地分支

恢复本地已删除分支

# 查看所有操作记录,包括被删分支之前的 commit
git reflog
 
# 找到分支最后一次的 commit hash,例如:
# abc1234 HEAD@{2}: commit: fix bug xxx
 
# 用这个 hash 重建分支
git branch <分支> abc1234
 
# 或者直接切出来
git checkout -b <分支> abc1234
Link to original

git 如何对历史搜索

历史:在 commit 信息中查找并展示 commit

git log --grep="待过滤信息"
Link to original

历史: 在文件中查找内容并展示 commit

git log -S"待搜索内容" -p
Link to original

本地 Git 仓库删除大 object

最简单的方法,删除远程仓库,重新上传并重新提交,缺点是会丢失历史数据,

2025-09-27 由于之前加入 rime-ice 仓库,导致仓库过大,只好按照这个方法

git 文件名大小写敏感

原因是 windows 系统大小写不敏感,而 git 大小写敏感

git CR/CRLF 是怎么解决的?

git 在 powershell 使用命令行时出现乱码

git config --global core.quotepath false
git config --global gui.encoding utf-8
git config --global i18n.commit.encoding utf-8
git config --global i18n.logoutputencoding utf-8
Link to original

签出会覆盖本地修改

场景描述:

通常我会在 dev 分支上操作,然后细粒度地提交 commit,上传到 github 上形成一个 pull-request,然后 main 再接受 pr,合并成一个

但是有时候会忘记切换分支(比如现在就是),直接在 main 上更改

在 vscode 的状态栏就会出现 *,此时想换到 dev 分支

直接切换会出现签出会覆盖本地修改的提示

该提示下的三个选项分别是什么意思呢?

  1. 储藏并签出:希望【暂存区】仍然在当前分支,然后切换到另一个分支
  2. 迁移更改:希望将【暂存区】的内容切换到另一个分支,可能要处理冲突问题
  3. 强制签出:(不推荐)直接放弃当前分支(比如 main)未提交的 commmit,然后切换为分支 dev

所以该场景我们需要的是【迁移更改】

参考资料