这是为你整理的 Git 常用命令,按照使用场景分类,并附上说明。
一、核心基础(必须掌握)
| 命令 | 说明 |
|---|---|
git init | 在当前目录初始化一个新的 Git 仓库 |
git clone <url> | 克隆一个远程仓库到本地 |
git add <file> | 将文件添加到暂存区(Stage) |
git add . | 将所有修改/新增的文件添加到暂存区 |
git commit -m "提交说明" | 将暂存区的内容提交到本地仓库,并附上说明 |
git status | 查看工作区和暂存区的状态(哪些文件被修改、新增、删除) |
git log | 查看提交历史记录(按 q 键退出) |
git log --oneline | 查看简洁版的提交历史(一行显示) |
git diff | 查看工作区和暂存区的差异 |
git diff --staged | 查看暂存区和上一次提交的差异 |
git restore <file> | 撤销工作区的修改,恢复到上次提交或暂存区的状态 |
git restore --staged <file> | 将文件从暂存区移出(unstage),但保留工作区的修改 |
git commit --amend | 修补上次提交(修改提交信息或将新更改并入上次提交) |
基础工作流示意图:
工作区 (Working Directory) --`git add`--> 暂存区 (Staging Area) --`git commit`--> 本地仓库 (Repository)
二、分支管理
| 命令 | 说明 |
|---|---|
git branch | 查看所有本地分支(当前分支前有 * 号) |
git branch -a | 查看所有分支(包括远程分支) |
git branch <branch-name> | 创建一个新分支 |
git checkout <branch-name> | 切换到指定分支 |
git checkout -b <branch-name> | 创建并切换到新分支(常用) |
git switch <branch-name> | (较新Git版本) 切换到分支(推荐,语义更清晰) |
git switch -c <branch-name> | (较新Git版本) 创建并切换到新分支 |
git merge <branch-name> | 合并指定分支到当前分支 |
git branch -d <branch-name> | 删除本地分支(如果已合并) |
git branch -D <branch-name> | 强制删除本地分支(即使未合并) |
git log --oneline --graph --all | 图形化查看分支和合并历史 |
三、远程操作
| 命令 | 说明 |
|---|---|
git remote -v | 查看远程仓库地址(verbose 详细信息) |
git remote add <shortname> <url> | 添加一个新的远程仓库并命名(通常 origin) |
git fetch <remote> | 从远程仓库拉取更新到本地仓库,不自动合并到工作区 |
git pull <remote> <branch> | 拉取并合并(=git fetch + git merge) |
git pull --rebase | 拉取更新并使用变基方式合并(保持历史线整洁) |
git push <remote> <branch> | 推送本地提交到远程仓库 |
git push -u <remote> <branch> | 推送并设置上游分支(第一次推送时使用,后续可只用 git push) |
git push --force 或 git push -f | 强制推送(会覆盖远程历史,谨慎使用) |
git push origin --delete <branch> | 删除远程分支 |
四、撤销与回退(谨慎操作)
| 命令 | 说明 |
|---|---|
git checkout -- <file> | (旧命令) 丢弃工作区某个文件的修改(同 git restore <file>) |
git reset HEAD <file> | (旧命令) 将文件从暂存区移出(同 git restore --staged <file>) |
git reset --soft <commit_id> | 回退到某个提交,但保留工作区和暂存区的修改 |
git reset --mixed <commit_id> | 默认模式,回退到某个提交,保留工作区修改,清空暂存区 |
git reset --hard <commit_id> | 彻底回退到某个提交,丢弃所有工作区和暂存区的修改(危险!) |
git revert <commit_id> | 新建一个提交来“抵消”指定的提交,用于安全地撤销公共历史 |
五、其他实用命令
| 命令 | 说明 |
|---|---|
git stash | 储藏当前工作区和暂存区的修改(用于临时切换分支) |
git stash pop | 恢复最近一次储藏的内容并删除储藏记录 |
git stash list | 查看所有储藏记录 |
git stash apply | 恢复储藏内容,但不删除储藏记录 |
git tag <tag-name> | 为当前提交打上轻量标签(常用于版本发布) |
git tag -a <tag-name> -m "msg" | 创建带附注的标签 |
git show <commit_id> | 查看某次提交的具体内容更改 |
.gitignore | 配置文件,用于指定需要被 Git 忽略的文件/文件夹 |
六、典型工作流示例
场景:日常开发一个新功能
- 更新本地主分支:
git checkout main && git pull origin main - 创建功能分支:
git checkout -b feature/awesome-new-feature - 开发代码(多次修改)...
- 添加修改到暂存区:
git add .或git add <具体文件> - 提交到本地仓库:
git commit -m "feat: 添加了xx功能" - 重复第3-5步,直到功能完成。
- 推送到远程:
git push -u origin feature/awesome-new-feature - 在GitHub/GitLab等平台创建Pull Request/Merge Request,请求合并到
main分支。 - 代码审查通过后,在平台上合并分支。
- 切回主分支并拉取最新代码:
git checkout main && git pull - (可选)删除本地功能分支:
git branch -d feature/awesome-new-feature
重要提示:
- 勤提交:提交粒度小,意义明确。
- 写清晰的提交信息:这是项目的历史文档。
- 推送到远程前先拉取:避免冲突。
- 理解
merge和rebase的区别:merge保留完整历史,rebase创造线性历史。 reset --hard和push --force是危险操作,在团队协作中慎用。
这是最常用的一部分命令,熟练掌握它们足以应对90%以上的日常开发场景。建议在实际操作中不断练习。