1. 安全拉取项目 (Clone)
很多新人入职第一天卡在这里:有权限但拉不下来代码。这通常是因为还在用 HTTPS 这种老旧方式。
组长给你发了一个仓库地址:git@gitlab.company.com:backend/api-service.git。
你直接复制去下载,结果报错:Permission denied (publickey)。
正确步骤:配置 SSH Key
这是为了让公司服务器认识你的电脑(相当于录入指纹),配置一次,永久有效。
最后一步: 打开公司 GitLab/GitHub 网页 -> 点击头像 -> Settings -> SSH Keys -> 粘贴进去并保存。
现在,执行拉取
2. 标准开发流程 (Daily Workflow)
任务:把 index.html 里的标题从 "Welcome" 改成 "Hello"。
Step 1: 检查状态
Step 2: 加入暂存区 (Add)
Step 3: 提交存档 (Commit)
3. 核心难点:Merge 还是 Rebase?
这是小白最容易混淆的地方。两者都是“合并代码”,但结果完全不同。
你在 feature 分支开发,同时同事在 main 分支提交了新代码。现在你需要更新你的分支,把同事的代码同步进来。
特点:保留完整历史,但会生成一个额外的“合并节点”,导致历史线分叉、像渔网一样乱。
特点:把你的提交“剪切”下来,“粘贴”到同事最新提交的后面。历史线是一条直线,非常干净。
1. 在自己的私有分支上(别人不用的),为了保持整洁,尽量用
Rebase。2. 在公共分支上(如 main/dev),绝对禁止使用 Rebase,必须用
Merge。
4. 手把手解决冲突
你和同事小李都修改了 config.js 的第 3 行。
小李改成了 timeout = 5000 并先推送了。
你改成了 timeout = 3000,拉取时报错:CONFLICT (content): Merge conflict in config.js。
Step 1: 打开代码编辑器
你会看到如下乱码,不要怕,这是 Git 在问你选哪个:
<<<<<<< HEADconst timeout = 3000; // 你的代码=======const timeout = 5000; // 小李的代码 (Incoming)>>>>>>> 4a5b6c...
Step 2: 修改代码
直接删除那些 <<< === >>> 符号,保留你认为正确的数值(比如协商后决定用 5000)。
const timeout = 5000;
Step 3: 告诉 Git 你修好了
5. 救命药丸:写错了怎么办?
场景 A: 只是写乱了,还没 add
“把文件还原成上次提交的样子,我刚写的都不要了。”
场景 B: 已经 add 了,但不想 commit
“哎呀,多添加了一个文件到暂存区。”
场景 C: 已经 commit 了,想撤销这次提交
“刚才提交的代码有 Bug,我要撤销这次提交,但保留代码让我再改改。”(最常用)
6. 忽略文件配置 (.gitignore)
有些文件永远不应该上传到仓库,比如:密码文件、操作系统缓存、巨大的 node_modules、日志文件。
Git 有一个门卫叫 .gitignore。如果你把文件名写在里面,Git 就会假装看不见它们,git status 不会提示,git add 也不会添加。
如何配置?
在项目最外层新建一个名为 .gitignore 的文件(注意前面有个点),写入以下内容:
原因:文件在添加进 .gitignore 之前已经被 Git 追踪了。
解决办法:必须先从 Git 缓存中删除它。
7. 综合实战:开发者的一天
这里模拟从接到需求到代码上线的全过程。请按顺序执行。
接到新需求
任务:开发“联系我们”页面 (contact.html)。
原则:永远不要在 main 分支直接写代码,第一件事是切新分支。
沉浸式开发
你在项目中新建了 contact.html 并写完了代码。现在需要保存。
突发状况:主线变了
准备提交时,发现同事刚刚向 main 分支推送了公共组件更新。你需要把这些更新“同步”到你的分支里。
提交上线
本地测试通过,代码是最新的,历史是干净的。发射!
之后去 GitLab/GitHub 网页上点击 "Create Merge Request" 即可。