Git常用
Git常用命令行
【速推】首次提交
1 | git init |
origin后要加<远程仓库URL>:
1 | git remote add origin |
后续同步:
1 | git pull |
【回退】命令行
1 | # 常用三种模式: |
我最常用:
我自己开发,私有仓库,只有一个分支,git回退到仓库的第一次提交
hard后面加版本号
git reset --hard |
彻底删除所有未跟踪的文件和文件夹:
1 | git status |
Git命令
专业名词(黑话)
Git 工作流
graph LR A[关联工作区] -- git add --> B[暂存区] B -- git commit --> C[本地仓库] C -- git push --> E[远程仓库]工作区文件:本地文件夹的文件。
在 Git 版本控制中,工作区文件指的是你在本地电脑上直接编辑、修改的项目文件,也就是你能在操作系统的文件夹里看到的那些文件(比如文档、代码、图片等)。简单说,工作区(Working Directory)就是你克隆或创建项目后,在本地电脑上存放项目文件的那个文件夹,而这个文件夹里的所有文件(包括子文件夹里的文件)都可以称为 “工作区文件”。
暂存区:
在 Git 版本控制中,暂存区(Staging Area) 是一个介于「工作区」和「本地仓库」之间的临时存储区域,也被称为「索引(Index)」。它的核心作用是:临时存放你想要提交到本地仓库的修改,让你可以先 “预览” 哪些修改会被纳入下一次提交,再统一提交到仓库为什么需要暂存区?
想象一个场景:你同时修改了项目中的 3 个文件(A、B、C),但其中只有 A 和 B 的修改是完整的,C 的修改还没完成。这时候你想先提交 A 和 B 的修改,而暂时忽略 C—— 暂存区就是用来解决这个问题的:你可以先把 A 和 B 放入暂存区,然后只提交暂存区的内容,C 仍然留在工作区继续修改。
工作区文件的状态:
- 未跟踪(Untracked):新创建的文件,还没被 Git 记录(Git 不知道它的存在);
- 已跟踪(Tracked):已被 Git 记录的文件,包括:
- 未修改(Unmodified):和 Git 最后一次记录的版本一致;
- 已修改(Modified):被编辑过,但还没存入暂存区;
- 已暂存(Staged):修改后被添加到暂存区(通过
git add命令),等待提交到本地仓库。
**子模块:**嵌套仓库
在 Git 中,子模块(Submodule) 是一种特殊功能,用于在一个 Git 仓库(称为 “主项目”)中嵌入另一个独立的 Git 仓库(称为 “子模块项目”),同时保持两个仓库的独立性。done
Git 版本控制工具中常用的命令
选项
1. 初始化与克隆
| 命令 | 常用选项 | 说明 |
|---|---|---|
git init |
- | 初始化本地仓库 |
git clone <url> |
-b <branch> |
克隆仓库,-b指定分支 |
2. 文件操作
| 命令 | 常用选项 | 说明 |
|---|---|---|
git add <file> |
. -p --all |
暂存文件,.全部,-p交互式 |
git rm <file> |
--cached |
删除文件,--cached仅停止跟踪 |
git mv <old> <new> |
- | 重命名文件 |
3. 提交
git commit 命令的主要常用选项有:
| 选项 | 全称 | 作用 |
|---|---|---|
-a |
--all |
自动暂存所有已跟踪文件的修改和删除,跳过 git add |
-m |
--message |
指定提交信息,如 git commit -m "修复bug" |
-am |
--all --message |
-a + -m 组合,最常用 |
--amend |
--amend |
用于修改最近一次提交,不创建新提交 |
1 | git rm README.md # 先解决冲突 |
4. 分支管理
| 命令 | 常用选项 | 说明 |
|---|---|---|
git branch |
-a -r -d |
查看/创建/删除分支,-a所有分支 |
git checkout |
-b |
切换分支,-b创建+切换 |
git merge <branch> |
--no-ff |
合并分支 |
git rebase <branch> |
- | 变基(提交线性化) |
5. 远程操作
| 命令 | 常用选项 | 说明 |
|---|---|---|
git remote |
-v add |
管理远程仓库 |
git pull |
--rebase |
拉取+合并,--rebase干净历史 |
git push |
-u --force --all |
推送,-u设置上游,--force强制推送 |
git fetch |
- | 只拉取不合并 |
6. 查看
| 命令 | 常用选项 | 说明 |
|---|---|---|
git status |
-s | 查看状态,-s简洁版 |
git log |
--oneline --graph |
查看提交历史 |
git diff |
--cached |
对比差异 |
git show <commit> |
- | 查看具体提交 |
7. 撤销与重置
| 命令 | 常用选项 | 说明 |
|---|---|---|
git reset |
--hard --soft |
重置到指定提交 |
git revert <commit> |
- | 创建反向提交(安全撤销) |
git checkout -- <file> |
- | 恢复文件到上次提交 |
总数:Git 每个命令都有 20-50 个选项,但实际开发只用上述 80% 最常用选项就够了。
git clone
:“下载” 远程项目到本地;
作用:从远程仓库(比如 GitHub、GitLab 等)复制一个完整的项目到本地电脑。
它会将远程仓库的所有文件、分支、提交历史等完整下载到本地,并自动创建一个与远程仓库同名的文件夹,同时初始化本地 Git 仓库,关联到远程仓库。
示例:
克隆远程仓库到当前目录(生成与仓库同名的文件夹):
1 | git clone <远程仓库地址> |
自定义文件夹名称(不使用仓库默认名称):
1
2
3git clone <远程仓库地址> <本地目录名>
# 示例:克隆到名为 "my-project" 的文件夹
git clone https://github.com/Kkkika/Kkkika.github.io.git my-project只克隆指定分支(默认克隆所有分支,此参数可节省时间):
1
2
3git clone -b <分支名> --single-branch <远程仓库地址>
# 示例:只克隆远程的 dev 分支
git clone -b dev --single-branch https://github.com/username/repo-name.git浅克隆(只获取最近的 N 次提交,适合大型仓库,加快克隆速度):
1
2
3git clone --depth <次数> <远程仓库地址>
# 示例:只获取最近 10 次提交
git clone --depth 10 https://github.com/username/repo-name.git克隆时包含子模块(如果项目包含子模块,需用此参数才能完整克隆):
1
2git clone --recursive <远程仓库地址>
# 若已克隆但子模块未下载,可补拉:git submodule update --init --recursive
git branch
:“管理” 本地分支(查看、创建、删除);
作用:用于管理本地分支(分支可以理解为项目的 “并行开发线”,方便多人协作或功能隔离)。
常用用法:
1. 查看分支
不带参数:查看本地所有分支(当前分支前有
*标记):git branch
查看本地 + 远程所有分支(远程分支以
remotes/origin/开头):git branch -a
查看远程分支(仅远程,不包含本地):
git branch -r
查看分支关联的远程分支(多人协作时常用,确认本地分支对应哪个远程分支):
1
2git branch -vv
# 输出示例:* main a1b2c3d [origin/main] 提交说明
2. 创建分支
基于当前分支创建新分支(创建后仍在当前分支,需手动切换):
1
2
3git branch <新分支名>
# 示例:基于当前分支创建 feature/payment 分支
git branch feature/payment
3. 删除分支
删除本地分支(需确保分支已合并,否则会提示错误):
1
2
3git branch -d <分支名>
# 示例:删除已合并的 old-branch
git branch -d old-branch强制删除未合并的分支(危险!未合并的修改会丢失):
1
2
3git branch -D <分支名>
# 示例:强制删除未合并的 test-branch
git branch -D test-branch
4. 重命名分支
重命名当前所在分支:
1
2
3git branch -m <新分支名>
# 示例:将当前分支重命名为 bugfix/login
git branch -m bugfix/login重命名指定分支(无需切换到该分支):
1
2
3git branch -m <旧分支名> <新分支名>
# 示例:将 feature/old 重命名为 feature/new
git branch -m feature/old feature/new带分支名:创建新分支(但不会自动切换到新分支)。
git branch feature-login # 创建名为 feature-login 的新分支
-d参数:删除指定分支(删除前需确保该分支的修改已合并,否则用-D强制删除)。git branch -d old-branch # 删除 old-branch 分支
git checkout
:“切换” 分支或 “恢复” 文件。
作用:主要用于 “切换分支” 或 “恢复工作区文件”(Git 2.23+ 后推荐用 git switch 切换分支,功能更清晰,但 checkout 仍广泛使用)。
常用用法:
切换到已存在的分支:
git checkout dev # 切换到 dev 分支
创建并立即切换到新分支(相当于
git branch 新分支名+git checkout 新分支名的简写):git checkout -b dev # 创建并切换到 dev 分支
恢复工作区的某个文件到最近一次提交的状态(丢弃本地修改):
git checkout -- README.md # 把 README.md 恢复到最近提交的版本
git冲突
- git冲突会出现哪些情况,分别怎么解决
Git冲突主要出现在合并(merge)或拉取(pull)时,两个分支对同一文件做了不兼容修改。
常见冲突类型
1. 内容冲突(最常见)
两个分支修改同一文件的同一行:
1 | text<<<<<<< HEAD |
解决:编辑文件删除标记符 <<<<<<< ======= >>>>>>>,保留需要的代码,然后 git add 文件名 git commit
2. modify/delete 冲突(你现在的类型)
一个分支修改了文件,另一个分支删除了文件:
1 | text |
解决:
- 想删除:
git rm README.md - 想保留:
git checkout --ours/--theirs README.md或git add README.md
3. 文件名冲突
两个分支重命名同一文件为不同名字,或修改文件名。
解决:选择保留哪个文件名,用 git mv 重命名。
通用解决流程
1 | bash1. git status # 查看哪些文件冲突 |
紧急退出
1 | bash |
分支管理
常用命令
1 | # 查看分支 |
Git Flow
(经典企业级策略)
分支结构:
main/master- 主分支,生产环境代码develop- 开发分支,集成所有功能feature/*- 功能分支,从 develop 拉出release/*- 发布分支,从 develop 拉出hotfix/*- 热修复分支,从 main 拉出
GitHub Flow
(简化流程)
适用于持续交付:
- 只有一个长期分支:
main - 所有功能都在单独分支开发
- 通过 Pull Request 合并
GitLab Flow
(环境分支策略)
分支结构:
main→pre-production→production- 代码按环境流动
GitHub中clone指定Commits
(Github中怎么找回历史版本;GitHub历史版本恢复指南;GitHub中下载指定版本;Github查看项目的历史版本,并实现版本的回滚)
假设:我想下载Kkkika/Kkkika.github.io仓库master分支的第一次提交
首先进入仓库后,点击【Commits】获取历史版本的提交哈希值

时间拉到最前,找到第一次提交,点击【复制】按钮

克隆后创建新分支
如果你想在特定提交的基础上进行一些修改或实验,最好创建一个新分支。
新建一个文件夹来存放代码,注意路径不要有中文:
C:\Code\githubclone
然后打开cmd
cd C:\Code\githubclone |
克隆仓库并进入目录
1
2git clone https://github.com/Kkkika/Kkkika.github.io.git
cd Kkkika.github.io基于特定提交创建并切换到一个新分支:这可以避免“分离头指针”状态。
1
2git branch my-new-branch cc09550ac7db24e987f6f2130da2ee1564191b12
git checkout my-new-branch或者更简洁地用一条命令:
git checkout -b my-new-branch cc09550ac7db24e987f6f2130da2ee1564191b12
这样,你就在一个名为
my-new-branch的分支上工作,这个分支的起点就是你指定的那个提交。
浅克隆(如果只想快速获取)
如果你只关心最新的一部分提交,或者仓库很大想加快克隆速度,可以考虑浅克隆。
浅克隆仓库(例如只克隆最近 10 个提交):
bash
1
2git clone --depth 10 https://github.com/Kkkika/Kkkika.github.io.git
cd Kkkika.github.io--depth 10参数表示只克隆最近10次提交的历史。你需要确保你想要的提交(cc09550...)在这最近的10次提交之内。然后切换到你想要的提交:
git checkout cc09550ac7db24e987f6f2130da2ee1564191b12
重要提示
- 关于
-b参数:-b在git clone中用于指定分支或标签,不能直接用于提交哈希5。 - “分离头指针”状态:直接
git checkout <commit-hash>会进入此状态。在此状态下进行更改并提交后,如果不创建分支指向这些新提交,它们可能会被 Git 的垃圾回收机制清除10。如果计划基于该提交进行修改,请务必创建新分支。 - 获取正确的提交哈希:确保你复制的提交哈希是正确的且存在于远程仓库中。你可以通过 GitHub 网站的提交历史页面来查看和确认提交哈希。
如何选择方法?
为了更清晰地选择,可以参考下面的流程:
git checkout |
graph LR
A[需求:克隆特定提交] --> B{完整历史?}
B -- 是 --> C[克隆仓库<br>checkout 提交]
B -- 否 --> D[浅克隆<br>checkout 提交]
C --> E{需修改?}
D --> F{需修改?}
E -- 是 --> G[创建分支]
E -- 否 --> H[分离头指针]
F -- 是 --> G
F -- 否 --> H
可能遇到的问题
- 网络问题

- 关闭梯子
- 打开加速器
Gitee
git推送
新建仓库
新建项目,关联工作区
上传到仓库的文件夹名称为blog:

首先,新建仓库

【注意】文件夹名称与仓库名称需一致
cmd执行命令行
将本地内容首次推送到空的 Git 远程仓库,需按顺序执行以下命令流程。
以下是完整操作步骤及注意事项:
确保路径是项目路径
cd C:\Code\KikaBlog\blog
初始化本地仓库
git init
- 在项目根目录执行,生成隐藏的.git文件夹
添加文件并提交
1
2git add . # 添加所有文件到暂存区
git commit -m "Initial commit" # 提交到本地仓库1
2git add .
git commit -m "Initial commit"- 必须至少有一次提交,否则推送会失败(Git 不允许推送空分支)。
关联远程仓库
git remote add origin <远程仓库URL>
git remote add origin
验证关联:
git remote -v
查看 URL 是否正确。
推送到远程仓库(首次推送需设置上游)
git push -u origin master
分支名为 master
-u(或–set-upstream)参数:
- 建立本地分支与远程分支的追踪关系。
后续推送
1
2
3
4git pull
git add .
git commit -m "update"
git push
示例
在任何IDE的终端或者cmd中运行命令行都可以
在Cursor中打开终端:

确保路径最后的文件夹和仓库同名:

所有用到的命令:
1 | git init |
成功推送:

后续推送用到的三个命令:

克隆现有仓库
克隆现有仓库,建立工作区
1 | # 克隆远程仓库(自动建立所有关联) |
