常见的 Git 命令及其作用:
基础命令
git init
- 初始化一个新的 Git 仓库git clone <url>
- 克隆远程仓库到本地git add <file>
- 将文件添加到暂存区git commit -m "message"
- 提交暂存区的更改git status
- 查看工作区和暂存区状态git diff
- 查看工作区与暂存区的差异
分支操作
git branch
- 查看、创建或删除分支git checkout <branch>
- 切换分支git merge <branch>
- 合并指定分支到当前分支git branch --set-upstream-to=origin/<branch>
- 设置上游分支
远程操作
git pull
- 从远程仓库获取并合并更改git push
- 将本地更改推送到远程仓库git fetch
- 从远程仓库获取最新数据但不合并
查看历史
git log
- 查看提交历史git reflog
- 查看操作历史
Git版本控制架构图
workspace :工作区,就是平时存放,编辑,修改项目代码的地方
index / stage :暂存区,用于临时存放改动,事实上它只是一个文件,保存即将提交到文件列表的信息
Repository : 仓库区(本地仓库),就是安全存放数据的位置,这里面有提交所有的版本的数据。其中HEAD指向最新放入仓库的版本
Remote:远程仓库,托管代码的服务器
代码冲突解决指南
冲突成因
1.开发者没有及时拉取项目代码,导致在过旧版本(如1.0)的代码基础上编译,上传时与现有版本(如1.5)严重脱节,导致代码合并时产生冲突。
2.开发者与团队成员没有沟通好代码的修改意图,导致合并时代码产生冲突。
如何预防
-
频繁拉取:每天开工前先
git pull
,设置桌面提醒每小时拉取一次 -
小步提交:别攒大招!单个功能拆分提交,减少冲突范围
-
沟通为王:修改公共文件前在群里吼一嗓子,用飞书机器人自动提醒
-
分支策略:推荐Git Flow工作流,feature分支开发完及时合并
拓展学习:Git Flow工作流
图例
图解
develop分支(开发分支):
包含项目的完整历史记录,而 main分支将只包含最新的生产版本。其他开发人员应从develop分支clone创建一个本地跟踪分支。
Feature分支(功能分支):
每个新功能都应该创建自己的功能分支,如果需要备份/协作可以将其推送到中央存储库。但是,feature分支不应该从main分支拷贝,而是从最新的开发分支拷贝创建。当一个功能完成后,它会被合并回develop。feature分支不应该直接与 main 交互。
Release分支(发布分支):
一旦 develop 具备发布条件,我们就可以从 develop 分支分支发布。创建release分支后会启动下一个发布周期,因此在此之后不能添加新功能——只有bugfix、文档编辑和其他面向发布的任务才能在release分支中进行。但具备发布条件后,发布分支会合并到 main 分支中,并打上版本号标记。此外,我们还应该重新合并到develop中,因为从创建release以来可能存在变化。
Hotfix分支(热修复分支):
hotfix分支用于快速修补生产版本。hotfix分支和release分支、feature分支很像,只是它基于 main分支 而不是develop分支,它是唯一应该直接从 main 分支clone的分支。修复完成后,hotfix分支将合并到main分支和develop分支(或当前版本分支)中,并且main分支应使用更新的版本号进行标记。
Git管理技巧补充
对于某些没有必要上传到远程仓库的数据和文件,可以通过 .gitignore 文件来控制忽略掉这部分文件的上传。
具体步骤:
1. 创建 .gitignore 文件
在项目根目录下创建 .gitignore
文件:
#打开终端输入
touch .gitignore
2. 添加要忽略的文件夹
在 .gitignore
文件中添加要忽略的文件夹路径:
# 忽略整个文件夹
folder_name/
# 忽略特定路径下的文件夹
path/to/folder/
# 忽略所有名为特定名称的文件夹
node_modules/
dist/
build/
3. 常见的忽略规则
folder/
- 忽略整个文件夹**/folder/
- 忽略所有路径下的同名文件夹folder/*
- 忽略文件夹内所有内容,但保留文件夹本身folder/**/*.log
- 忽略文件夹及其子文件夹中的所有 .log 文件
4. 如果文件夹已经被跟踪
如果要忽略的文件夹已经被 Git 跟踪,需要先从缓存中移除:
# 移除单个文件夹
git rm -r --cached folder_name
# 提交更改
git commit -m "Remove folder from tracking"
5. 提交 .gitignore 文件
git add .gitignore
git commit -m "Add .gitignore file"