Git 指令笔记 - 详解
Git 指令笔记
- 1. 安装与配置
- 查看安装版本
- 全局配置用户信息 (第一次安装后必须设置)
- 查看所有配置项
- 为特定仓库设置不同用户 (在仓库目录下执行,去掉 --global)
- 2. 创建仓库与基础操作
- 初始化当前目录为新的 Git 仓库
- 克隆一个远程仓库到本地
- 检查当前文件状态
- 将文件添加到暂存区 (Stage)
- 提交更改到本地仓库
- 一次性添加所有跟踪文件的修改并提交 (跳过 git add)
- 3. 查看与比较更改
- 查看提交历史
- 比较工作区和暂存区的差异
- 或
- 比较两个特定提交之间的差异
- 4. 分支管理
- 查看所有分支
- 创建新分支
- 切换分支
- 创建并切换到新分支
- 合并分支 (将指定分支合并到当前分支)
- 删除分支
- 重命名当前分支
- 5. 远程仓库操作
- 查看远程仓库信息
- 添加远程仓库地址
- 从远程仓库拉取更改并合并到当前分支
- 仅从远程仓库获取更改,但不合并
- 将本地分支推送到远程仓库
- 删除远程分支
- 6. 撤销与回退
- 撤销工作区的修改 (未 git add)
- 将文件从暂存区撤回到工作区 (已 git add, 但未 git commit)
- 撤销提交 (创建一个新提交来反转之前的提交)
- 回退到某个提交 (危险操作:会丢弃之后的提交历史)
- 7. 储藏 (Stashing)
- 临时储藏当前工作区和暂存区的修改
- 查看所有储藏列表
- 应用最新的储藏并保留储藏记录
- 应用最新的储藏并删除该储藏记录
- 删除储藏记录
- 8. 标签管理
- 创建附注标签 (推荐)
- 创建轻量标签
- 查看所有标签
- 将标签推送到远程
- 删除标签
- 9. 高级与实用技巧
- 修改最后一次提交的信息 (尚未推送到远程)
- 将多个提交合并为一个 (交互式变基)
- 查看命令的执行记录
- 忽略文件
- 工作流总结
- 日常开发循环:
- 更新功能分支:
- .gitignore
- 忽略一个文件夹的跟踪
1. 安装与配置
查看安装版本
git --version
全局配置用户信息 (第一次安装后必须设置)
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
查看所有配置项
git config --list
为特定仓库设置不同用户 (在仓库目录下执行,去掉 --global)
git config user.name "该仓库的用户名"
2. 创建仓库与基础操作
初始化当前目录为新的 Git 仓库
git init
克隆一个远程仓库到本地
git clone <远程仓库URL># 示例git clone https://github.com/username/repo.git
检查当前文件状态
git status
将文件添加到暂存区 (Stage)
git add <文件名># 添加特定文件git add . # 添加所有当前目录下的更改(新建和修改)git add -A # 添加所有更改(包括删除操作)git add -u # 添加已跟踪文件的更改(修改和删除,不包括新建)
提交更改到本地仓库
git commit -m "提交信息的描述"
一次性添加所有跟踪文件的修改并提交 (跳过 git add)
git commit -am "提交信息的描述"
# 注意:对新建(未跟踪)的文件无效
3. 查看与比较更改
查看提交历史
git log # 详细历史
git log --oneline # 简洁的单行历史
git log --graph # 图形化显示分支合并历史
比较工作区和暂存区的差异
git diff
比较暂存区和最新提交的差异
bash
git diff --staged
或
git diff --cached
比较两个特定提交之间的差异
git diff <commit-id-1><commit-id-2>
4. 分支管理
查看所有分支
git branch # 查看本地分支
git branch -a # 查看所有分支(包括远程)
创建新分支
git branch <新分支名>
切换分支
git checkout <分支名># 或者使用更现代的 switch 命令git switch <分支名>
创建并切换到新分支
git checkout -b <新分支名># 或者git switch -c <新分支名>
合并分支 (将指定分支合并到当前分支)
git merge <要合并过来的分支名>
删除分支
git branch -d <分支名># 安全删除(已合并)git branch -D <分支名># 强制删除(未合并)
重命名当前分支
git branch -m <新分支名>
5. 远程仓库操作
查看远程仓库信息
git remote -v
添加远程仓库地址
git remote add origin <远程仓库URL># 通常 "origin" 是默认的远程仓库别名
从远程仓库拉取更改并合并到当前分支
git pull origin <分支名># 相当于 git fetch + git merge
仅从远程仓库获取更改,但不合并
git fetch origin
将本地分支推送到远程仓库
git push origin <本地分支名># 首次推送时建立追踪关系git push -u origin <本地分支名>
删除远程分支
git push origin --delete <远程分支名>
6. 撤销与回退
撤销工作区的修改 (未 git add)
git restore <文件名># 新命令git checkout -- <文件名># 旧命令
将文件从暂存区撤回到工作区 (已 git add, 但未 git commit)
git restore --staged <文件名># 新命令git reset HEAD <文件名># 旧命令
撤销提交 (创建一个新提交来反转之前的提交)
git revert <commit-id>
回退到某个提交 (危险操作:会丢弃之后的提交历史)
# 软回退:回退提交,但保留更改在工作区
git reset --soft <commit-id># 混合回退(默认):回退提交和暂存区,但保留更改在工作区git reset --mixed <commit-id># 硬回退(危险!):彻底丢弃提交、暂存区和工作区的所有更改git reset --hard <commit-id>
警告: git reset --hard 会永久丢失数据,请谨慎使用!
7. 储藏 (Stashing)
临时储藏当前工作区和暂存区的修改
git stash
# 或添加备注信息
git stash push -m "备注信息"
查看所有储藏列表
git stash list
应用最新的储藏并保留储藏记录
git stash apply
# 应用指定的储藏
git stash apply stash@{n
}
应用最新的储藏并删除该储藏记录
git stash pop
删除储藏记录
git stash drop stash@{n
} # 删除指定储藏
git stash clear # 删除所有储藏
8. 标签管理
创建附注标签 (推荐)
git tag -a v1.0 -m "版本1.0发布"
创建轻量标签
git tag v1.0-lite
查看所有标签
git tag
将标签推送到远程
git push origin v1.0 # 推送单个标签
git push origin --tags # 推送所有标签
删除标签
git tag -d v1.0 # 删除本地标签
git push origin --delete v1.0 # 删除远程标签
9. 高级与实用技巧
修改最后一次提交的信息 (尚未推送到远程)
git commit --amend
将多个提交合并为一个 (交互式变基)
git rebase -i HEAD~n # n代表要合并的提交数量
查看命令的执行记录
git reflog
# 常用于找回因 reset --hard 而丢失的提交
忽略文件
创建一个名为 .gitignore 的文件,在其中列出要忽略的文件和文件夹模式。
# 示例
*.log
node_modules/
.DS_Store
工作流总结
日常开发循环:
git pull origin main # 开始前先拉取最新代码
git switch -c feature/xxx # 创建并切换到功能分支
# ... 编写代码 ...
git add . # 添加更改到暂存区
git commit -m "message" # 提交到本地仓库
git push origin feature/xxx # 推送到远程
# 然后在Git平台(如GitHub)创建Pull Request请求合并
更新功能分支:
git switch main # 切换回主分支
git pull origin main # 拉取主分支最新代码
git switch feature/xxx # 回到功能分支
git merge main # 将主分支合并到功能分支,解决可能出现的冲突
.gitignore
忽略一个文件夹的跟踪
- 创建 .gitignore 文件(如果不存在)
# 导航到您的git仓库根目录
cd /path/to/your/repository
# 如果.gitignore文件不存在,则创建它
touch .gitignore
- 将数据文件夹添加到 .gitignore
# 在 .gitignore 文件中添加以下内容
/large_data_folder/
- 开头的斜杠 / 表示该路径是相对于仓库根目录的。这确保了只会忽略根目录下的 large_data_folder,而不是其他任何地方的同名文件夹。
- 如果的文件夹结构更复杂,例如在 data/participants/ 下,可以这样写:
/data/participants/
- 从 Git 索引中移除已跟踪的文件夹
如果这个数据文件夹已经被 Git 跟踪(即您之前已经 git add 过它),仅仅将其添加到 .gitignore 是不够的。Git 会继续跟踪它。您需要将其从 Git 的暂存区(索引)中移除,但同时保留本地文件。
执行以下命令:
# 停止跟踪该文件夹并将其从暂存区删除,但保留本地工作目录中的文件
git rm -r --cached /path/to/your/large_data_folder
# 例如,如果文件夹在根目录,名为 large_data_folder
git rm -r --cached large_data_folder
rm: 移除命令。
-r: 递归选项,用于删除文件夹及其所有内容。
–cached: 这是最关键的部分!它告诉 Git 只从索引/暂存区中移除文件,而不会删除您硬盘上的实际数据文件。
- 提交更改
完成上述操作后,您需要提交这次更改。这次提交的记录将会是“从 Git 中删除了这些文件”,但实际上它们只是被忽略了。
# 将 .gitignore 的修改和停止跟踪的操作一起提交
git add .gitignore
git commit -m "Stop tracking large_data_folder and add it to .gitignore"