Git 的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践
Git 作为一款功能强大、分布式的版本控制系统,已然成为行业标配。掌握 Git 的正确使用姿势与最佳实践,不仅能提升团队开发效率,还能保障项目代码的有序管理与稳健迭代。
基础概念
仓库(Repository) 既是代码的存储中心,也是版本演进的记录载体,分为本地仓库(local repository)与远程仓库(remote repository),本地仓库助开发者独立工作、暂存代码变更;远程仓库(像 GitHub、GitLab、Bitbucket 等平台所托管的)则实现团队成员间代码共享与协同。本地仓库是在本地上存储项目版本历史记录的地方。是一个隐藏的目录(通常名为.git
),位于工作区的根目录下
工作区(Working Directory) 是开发者在本地计算机上直接进行代码编写、文件修改等操作的实际目录。包含了项目的所有文件和子目录
暂存区(Staging Area) 暂存区是一个临时存储区域,用于存放即将被提交到本地仓库的修改。
分支(Branch) 是开发并行线,主分支(master)存储稳定可部署代码,功能分支从其派生专注单个特性或功能开发,修复分支应对紧急 bug,借分支隔离工作、灵活调配开发资源、降低风险。
git实践流程图
工作区到暂存区
初始状态:在工作区,文件可以是未被 Git 跟踪的(Untracked)状态。当开始一个新项目并在项目文件夹初始化 Git 仓库(git init
)或者克隆一个远程仓库(git clone [远程仓库URL]
)后,工作区就建立起来了。
新创建的文件或者还未被 Git 管理的已有文件处于未跟踪状态,例如,在项目目录下新建了一个配置文件config.yaml
,此时它就是未跟踪的
添加到暂存区(Add):当对工作区的文件进行修改或者新增文件后,使用git add
命令将这些文件添加到暂存区。这个操作实际上是将工作区中文件的修改内容复制到暂存区。
例如,你修改了一个代码文件main.java
并且希望将这个修改记录下来,你可以执行git add main.java
,这样修改后的main.java
的内容就被添加到了暂存区。
如果有多个文件需要添加,可以使用git add file1.java file2.java
。
暂存区到本地仓库
提交操作(Commit):在暂存区准备好要提交的修改后,使用git commit -m "提交说明"
命令将暂存区的内容提交到本地仓库。一个提交(Commit)就像是项目在某个特定时刻的一个快照,包含了当时被提交的文件的内容、作者信息、提交时间以及提交说明等。
例如,完成了一个功能模块的开发,将相关文件添加到暂存区后,通过git commit -m "完成功能模块X的开发"
就将这些修改记录为一个新的提交存储在本地仓库中。
每次提交都会在本地仓库中创建一个新的节点,这些节点通过指针连接形成一个版本演变的历史记录,可以通过git log
命令查看。
本地仓库与远程仓库
推送操作(Push):当在本地仓库完成了一系列的开发和提交,并且希望将这些修改分享给团队成员或者备份到远程服务器时,需要将本地分支推送到远程仓库。执行git push [远程仓库名] [本地分支名]
命令来完成推送。
例如,你在本地的feature - X
分支上完成了新功能的开发并且已经提交到本地仓库,你可以执行git push origin feature - X
将这个分支推送到名为origin
的远程仓库(这里origin
是远程仓库的别名,通常在克隆远程仓库时自动设置)。如果远程仓库中不存在与本地分支对应的分支,Git 会在远程仓库中创建一个新的分支
拉取操作(Pull):为了保持本地仓库与远程仓库同步,需要从远程仓库获取最新的修改。通过git pull
命令实现,它是git fetch
和git merge
的组合。git fetch
会从远程仓库获取最新的提交,但不会自动合并到本地分支,只是将远程分支的更新下载到本地的远程分支引用中。git merge
则会将获取到的远程分支的更新合并到本地对应的分支。
例如,团队中的其他成员在远程仓库的master
分支上推送了新的提交,可以在本地执行git pull origin master
来将这些更新合并到本地的master
分支。如果只想获取远程更新但不想立即合并,可以使用git fetch
命令,然后根据需要手动进行合并操作