Git作为世界上最流行的分布式版本控制系统,以其强大的分支管理、高效的协同工作能力和完善的版本追溯功能,深受广大开发者喜爱。熟练掌握Git的常用命令是每一位程序员必备的技能。本文将深入解析Git中那些最为基础且实用的命令,助您在日常开发工作中游刃有余。
一、初始化与配置
1. git init
用途: 在当前目录下创建一个新的Git仓库。
git init
执行此命令后,Git会在当前目录下生成一个隐藏的.git
目录,其中包含了管理仓库所需的必要文件和数据结构。至此,该目录便成为了Git仓库的根目录,您可以开始在此处进行版本控制。
2. git config
用途: 设置Git的全局或局部配置选项。
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
使用git config
可以设置Git的用户信息、编辑器偏好、代理设置等。上述命令设置了全局的用户名和电子邮件地址,它们将随您的每一次提交一同记录。如果您需要为特定仓库设置不同的配置,去掉--global
即可。
二、工作区与暂存区操作
3. git add
用途: 将工作区的文件添加到暂存区(Staging Area)。
git add <file>
git add .
git add <file>
将指定文件的当前状态添加到暂存区,准备纳入下一次提交。使用git add .
可将所有修改、新添加或删除的文件一次性添加到暂存区。
4. git rm
用途: 从工作区和暂存区移除文件,并跟踪其删除状态。
git rm <file>
此命令会从工作目录中删除指定文件,并将其从暂存区移除,以便在下一次提交时记录该文件的删除操作。
5. git restore
用途: 撤销工作区的改动或恢复暂存区的文件到HEAD版本。
git restore <file> # 恢复工作区文件到最近提交状态
git restore --staged <file> # 取消对文件的暂存,恢复到HEAD状态
git restore
命令可以用来撤销对工作区文件的改动,或者将已暂存的文件恢复到最近提交的状态,不保留本地更改。
三、提交与版本回溯
6. git commit
用途: 将暂存区的改动提交到本地仓库,形成一个新的提交点。
git commit -m "Commit message describing changes"
通过-m
参数后跟提交说明,将暂存区的所有改动保存为一个提交对象,并附带提供的说明文字。提交是Git版本控制的基本单元,每个提交都包含一个指向父提交的指针和一组改动。
7. git commit --amend
用途: 修改最近一次提交的信息或合并未暂存的改动。
git commit --amend -m "New commit message"
此命令允许您修改最近一次提交的说明,或者将当前未暂存的改动合并到最近那次提交中,从而保持提交历史的整洁。
8. git log
用途: 显示提交历史,包括作者、日期、提交信息等。
git log
git log --oneline --graph --decorate
git log
默认显示详细的提交历史。加上--oneline
、--graph
和--decorate
参数,可以得到简洁、图形化且带有分支标记的提交历史视图。
9. git reset
用途: 重置当前分支的HEAD指向,撤销提交或回滚暂存区和工作区的改动。
git reset HEAD <file> # 从暂存区移除文件,保留工作区改动
git reset --hard HEAD~1 # 回退至上一个提交,丢弃所有未提交的改动
git reset --hard <commit-id> # 强制回退到指定提交,丢弃所有后续提交和未提交的改动
git reset
提供了不同级别的重置操作,可以根据需要撤销暂存、回滚提交或彻底回到过去的某个提交状态。
四、分支与合并
10. git branch
用途: 列出、创建或删除分支。
git branch # 列出所有本地分支
git branch new-branch # 创建名为new-branch的新分支
git branch -d old-branch # 删除已合并的old-branch分支
git branch -D stubborn-branch # 强制删除未合并的stubborn-branch分支
通过git branch
命令,您可以查看、创建和删除分支,便于在不同开发线程间切换和管理代码版本。
11. git checkout
/ git switch
用途: 切换到指定分支或恢复工作区文件。
git checkout <branch>
git switch <branch>
git checkout <file> # 从HEAD恢复单个文件到工作区
git switch --discard-changes <file> # 类似效果,适用于较新版本Git
git checkout
(或git switch
,推荐在较新版本Git中使用)用于切换分支或恢复工作区文件到指定提交或分支的状态。注意,对于文件恢复操作,git switch
在较新版本中提供了更明确的选项。
12. git merge
用途: 合并指定分支到当前分支。
git merge <branch>
执行此命令后,Git将尝试将指定分支的改动合并到当前分支,如果合并过程中遇到冲突,需要手动解决冲突并再次提交。
13. git rebase
用途: 将当前分支的提交历史“重放”到另一分支顶部,实现线性化的提交历史。
git rebase <branch>
git rebase
用于在保持提交内容不变的前提下,改变提交的历史顺序,使其看起来像是直接基于目标分支进行的开发。这有助于保持分支历史的清晰和整洁,但需要注意可能会引入冲突,且不应在已推送至公共仓库的分支上执行。
五、远程操作
14. git fetch
用途: 从远程仓库获取最新的分支和提交信息,但不自动合并。
git fetch origin
git fetch
从指定的远程仓库(如origin
)拉取所有分支的最新提交信息,但不会自动合并到本地对应分支,而是将远程分支更新保存为远程跟踪分支(如origin/main
)。
15. git pull
用途: 获取远程分支的最新改动并自动合并到当前分支。
git pull origin main
git pull
相当于git fetch
后紧跟git merge
,它会从远程仓库拉取指定分支的最新提交,并尝试将其合并到当前分支。
16. git push
用途: 将本地分支的提交推送到远程仓库。
git push origin <local-branch>:<remote-branch>
此命令将本地指定分支的提交历史推送至远程仓库的相应分支。若省略远程分支名,默认推送到同名分支。如果远程分支不存在,且远程仓库允许自动创建分支,会创建新的远程分支。
六、其他实用命令
17. git status
用途: 查看当前工作目录和暂存区的状态。
git status
git status
是日常开发中频繁使用的命令,它显示哪些文件被修改、新增、删除以及哪些文件处于暂存状态,帮助您了解当前工作区与最近提交之间的差异。
18. git diff
用途: 显示工作区、暂存区或提交之间的文件差异。
git diff # 工作区与暂存区之间的差异
git diff --cached # 暂存区与最近提交之间的差异
git diff <commit-id> # 工作区与指定提交之间的差异
git diff
命令用于比较不同版本间的文件内容差异,是定位代码变化、排查问题的重要工具。
19. git stash
用途: 暂存当前未提交的改动,清理工作区以便进行其他任务。
git stash
git stash list
git stash apply # 恢复最近一次stash的内容
git stash drop # 删除最近一次stash
git stash
用于临时保存未提交的改动,使工作目录恢复到干净状态,便于切换分支或处理紧急任务。之后可以通过git stash apply
或git stash pop
恢复暂存的改动。