常见的 Git 命令
- 基础配置和信息查询 (Setup and Information)
git config --global user.name “Your Name”: 配置全局用户名,用于 Git 提交记录。
git config --global user.email “your.email@example.com”: 配置全局用户邮箱,同样用于 Git 提交记录。
git config --list: 列出当前的 Git 配置信息(包括全局、仓库级别等)。
git init: 在当前目录下初始化一个新的 Git 仓库 (repository)。
git status: 查看工作目录 (working directory) 和暂存区 (staging area) 的状态。显示哪些文件被修改了、哪些文件被暂存了、哪些文件未被 Git 跟踪等。
git help : 获取 Git 命令的帮助文档,例如 git help commit。
git version: 查看 Git 版本。
- 管理工作目录和暂存区 (Working with Changes)
git add : 将指定的文件添加到暂存区。
git add .: 将当前目录及其子目录下的所有修改和新增的文件添加到暂存区。
git add -u: 只将工作目录中 已跟踪 (tracked) 的文件的修改添加到暂存区(不包括新增的文件)。
git rm : 从工作目录和暂存区中删除指定的文件。
git rm --cached : 只从暂存区中删除文件,保留工作目录中的文件 (常用于停止跟踪某个文件,但不删除本地文件)。
git mv <old_file> <new_file>: 重命名或移动文件,并将其添加到暂存区。
git diff: 查看工作目录中 未暂存 (unstaged) 的修改内容。
git diff --staged: 查看暂存区中 已暂存 (staged) 的修改内容。
git diff : 比较两个分支之间的差异。
git restore : 撤销对工作目录中指定文件的修改,使其恢复到最近一次提交 (commit) 的状态 (未暂存的修改)。
git restore --staged : 将指定文件从暂存区移除,但保留工作目录中的修改 (取消暂存)。
git clean -fd: 删除工作目录中 未被跟踪 (untracked) 的文件和目录 (谨慎使用,会永久删除未跟踪的文件)。
- 提交历史 (Commit History)
git commit -m “Your commit message”: 提交暂存区中的更改到本地仓库,并添加提交信息 (commit message)。
git commit -am “Your commit message”: 相当于 git add -u 和 git commit -m 的组合,自动暂存已跟踪文件的修改并提交。
git commit --amend: 修改最近一次的提交 (commit)。可以修改提交信息,或者将暂存区的新更改添加到上一次提交中。
git log: 查看提交历史记录。
git log --oneline: 以简洁的单行格式显示提交历史。
git log --graph --oneline --decorate --all: 以图形化方式显示分支、合并关系和提交历史 (更直观)。
git log -p: 显示每次提交的详细 diff 信息。
git log --author=“Author Name”: 只显示指定作者的提交记录。
git log --grep=“keyword”: 只显示提交信息中包含指定关键词的提交记录。
git show : 查看指定提交的详细信息,包括提交信息、作者、日期和 diff 内容。
git reflog: 查看引用日志 (reference log),记录了 HEAD 和分支引用的变化,即使提交没有被任何分支或标签引用,也可以通过 reflog 找到 (用于找回丢失的提交)。
- 分支管理 (Branch Management)
git branch: 列出本地分支。
git branch -r: 列出远程分支。
git branch -a: 列出所有分支 (本地和远程)。
git branch <new_branch_name>: 创建新的本地分支 (但不会切换到新分支)。
git checkout -b <new_branch_name> <base_branch>: 创建新的本地分支并切换到新分支,基于 <base_branch> 创建。
git checkout <branch_name>: 切换到已存在的本地分支。
git checkout -: 切换到上一个分支 (例如,从 branchA 切换到 branchB 后,再执行 git checkout - 会切换回 branchA)。
git branch -d <branch_name>: 删除本地分支 (如果分支已合并到其他分支)。
git branch -D <branch_name>: 强制删除本地分支 (即使分支未合并)。
git push origin --delete <branch_name>: 删除远程分支。
git merge <branch_name>: 将指定分支 <branch_name> 合并到当前分支。
git rebase <branch_name>: 将当前分支变基 (rebase) 到 <branch_name> 分支之上 (用于保持提交历史的线性整洁,但有风险,谨慎使用)。
- 远程仓库 (Remote Repositories)
git remote add origin <remote_repository_url>: 添加远程仓库地址,通常命名为 origin。
git remote -v: 查看已配置的远程仓库地址。
git fetch origin: 从远程仓库 origin 获取最新的分支和提交信息,但不会自动合并到本地分支。
git pull origin <branch_name>: 从远程仓库 origin 拉取指定分支 <branch_name> 的最新更改,并合并到当前本地分支 (相当于 git fetch origin <branch_name> + git merge origin/<branch_name>)。
git push origin <branch_name>: 将本地分支 <branch_name> 的提交推送到远程仓库 origin 的同名分支。
git push origin --all: 推送所有本地分支到远程仓库。
git clone <repository_url>: 克隆 (clone) 远程仓库到本地。
- 标签 (Tags)
git tag: 列出本地标签。
git tag -l ‘v1.*’: 列出匹配模式的标签,例如列出所有以 v1. 开头的标签。
git tag <tag_name>: 基于当前 HEAD 提交创建一个轻量级标签。
git tag -a <tag_name> -m “Tag message”: 创建一个附注标签 (annotated tag),可以添加标签信息。
git tag <tag_name> : 为指定的提交 创建标签 (可以为历史提交打标签)。
git push origin <tag_name>: 推送指定的标签到远程仓库。
git push origin --tags: 推送所有本地标签到远程仓库。
git checkout <tag_name>: 切换到标签 <tag_name> 所指向的提交 (会进入 “detached HEAD” 状态)。
git tag -d <tag_name>: 删除本地标签。
git push origin --delete tag <tag_name>: 删除远程标签。
- 储藏 (Stashing) - 暂存未完成的更改
git stash: 储藏当前工作目录和暂存区的更改,回到干净的工作状态 (用于切换分支前保存当前工作进度,稍后恢复)。
git stash save “Your stash message”: 储藏更改并添加描述信息。
git stash list: 列出所有储藏的记录。
git stash apply: 应用最近一次储藏的更改,但储藏记录仍然保留在列表中。
git stash pop: 应用最近一次储藏的更改,并从储藏列表中删除该记录。
git stash apply stash@{n}: 应用指定的储藏记录 (例如 stash@{0} 是最近一次储藏)。
git stash drop stash@{n}: 删除指定的储藏记录。
git stash clear: 清空所有储藏记录。
- 子模块 (Submodules) - 管理项目中的外部仓库 (较为进阶)
git submodule add <repository_url>
git submodule init: 初始化子模块 (在克隆包含子模块的项目后需要执行)。
git submodule update: 更新子模块,检出子模块仓库中子模块配置文件指定的提交版本。
git submodule update --init --recursive: 递归初始化和更新子模块 (如果子模块还有子模块)。
- 其他常用命令
.gitignore 文件: 在项目根目录下创建 .gitignore 文件,用于指定 Git 忽略跟踪的文件和目录 (例如,编译产生的临时文件、日志文件、node_modules 目录等)。
git blame : 查看文件的每一行代码是由谁在哪个提交中修改的 (用于代码追溯和责任归属)。
git bisect: 使用二分查找法快速定位引入 bug 的提交 (用于 bug 调试)。
git cherry-pick : 将指定提交 的更改应用到当前分支 (用于移植特定提交)。
git revert : 创建一个新的提交,撤销指定提交 的更改 (用于撤销某个提交的影响,但保留提交历史)。
学习建议:
循序渐进: 先从最常用的命令开始学习,例如 git init, git clone, git add, git commit, git status, git log, git branch, git checkout, git merge, git pull, git push。
实践操作: 多练习,在实际项目中使用 Git 命令,加深理解。
查阅文档: 遇到不熟悉的命令或用法,及时查阅 Git 官方文档或使用 git help 。
使用可视化工具: 配合 Git 可视化工具 (如 Git Graph, GitLens, SourceTree) 可以更直观地理解 Git 的工作原理和分支关系。