-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
ab9c7cd
commit 5de5077
Showing
5 changed files
with
262 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
# 实践:注册并熟悉代码托管平台 (易炜涵) | ||
# 实践:注册并熟悉代码托管平台 | ||
|
||
> 学生注册代码托管平台账户并熟悉其功能。注册 GitHub、Gitee 等平台的账号。了解平台的主要功能界面,并做出一些常识。 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
## Git Rebase vs. Git Merge:选哪个?🤔 | ||
|
||
**目的:** 搞懂 Git 这两种合并分支的酷炫方式,以后合并代码不再纠结! | ||
|
||
**内容:** | ||
|
||
咱们先不讲那些复杂的理论,直接上例子,保证你一看就明白! | ||
|
||
### 场景模拟:团队合作开发新功能 🚀 | ||
|
||
假设你和小伙伴们正在一起开发一个超酷炫的新功能,每个人负责一部分: | ||
|
||
* **你:** 负责开发用户登录界面 (在 `feature/login` 分支) | ||
* **小伙伴A:** 负责开发商品展示页面 (在 `feature/product` 分支) | ||
* **主分支:** `main` 分支,是大家共同的基础 | ||
|
||
#### Git Merge:简单粗暴,历史全记录 📖 | ||
|
||
1. **你完成了登录界面的开发,想要把代码合并到 `main` 分支:** | ||
|
||
```bash | ||
git checkout main # 切换到 main 分支 | ||
git merge feature/login # 把 feature/login 分支合并到 main 分支 | ||
``` | ||
|
||
* **结果:** Git 会创建一个新的合并提交(merge commit),把你的 `feature/login` 分支和 `main` 分支的最新代码合并在一起。 | ||
|
||
* **特点:** 简单!`main` 分支的历史记录会完整保留所有分支的开发过程,就像一本详细的日记。 | ||
|
||
2. **小伙伴A也完成了商品展示页面的开发,同样合并到 `main` 分支:** | ||
|
||
```bash | ||
git checkout main | ||
git merge feature/product | ||
``` | ||
|
||
* **结果:** 又多了一个合并提交! | ||
|
||
* **潜在问题:** 如果很多人都在不同的分支上开发,`main` 分支的历史记录可能会变得很乱,像蜘蛛网一样 🕸️。 | ||
|
||
#### Git Rebase:乾坤大挪移,历史更清晰 ✨ | ||
|
||
1. **你完成了登录界面的开发,这次咱们用 `rebase`:** | ||
|
||
```bash | ||
git checkout feature/login # 切换到 feature/login 分支 | ||
git rebase main # 把 main 分支的最新代码“垫”到你的 feature/login 分支下面 | ||
git checkout main | ||
git merge feature/login # 快速向前合并 | ||
``` | ||
|
||
* **结果:** | ||
* `rebase` 会把你的 `feature/login` 分支上的提交“移动”到 `main` 分支的最新提交之后。就像是把你的分支“嫁接”到了 `main` 分支上。 | ||
* 然后再次在`main`进行`merge`时,由于`feature/login`是直接从`main`分支“生长”出来的,所以可以直接快速合并(fast-forward),不会产生额外的合并提交。 | ||
|
||
* **特点:** 干净!`main` 分支的历史记录会是一条直线,非常清晰。 | ||
|
||
2. **小伙伴A也用 `rebase` 合并:** | ||
|
||
```bash | ||
git checkout feature/product | ||
git rebase main | ||
git checkout main | ||
git merge feature/product #快速向前合并 | ||
``` | ||
|
||
* **结果:** 同样,`main` 分支的历史记录依然保持一条直线。 | ||
|
||
* **潜在问题:** `rebase` 会改写提交历史,如果你已经把 `feature/login` 分支推送到远程仓库,并且其他人在这个分支上工作,就不要用 `rebase` 了,否则会造成混乱。 | ||
|
||
### 总结:选哪个? | ||
|
||
| 特性 | Git Merge | Git Rebase | | ||
| :----------- | :---------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------ | | ||
| 历史记录 | 完整,包含所有分支的开发过程 | 简洁,一条直线 | | ||
| 操作难度 | 简单 | 稍复杂,需要理解“变基”的概念 | | ||
| 适用场景 | 适合小型团队,或者希望保留完整开发历史的情况 | 适合个人开发,或者希望保持主分支历史清晰的情况 | | ||
| **注意事项** | **如果分支已经推送到远程仓库,并且其他人在这个分支上工作,不要用 `rebase`!** | **如果分支已经推送到远程仓库,并且其他人在这个分支上工作,不要用 `rebase`!** | | ||
| **比喻** | **像一本详细的日记,记录了所有发生的事情** | **像一棵树,主干清晰,分支从主干生长出来** | | ||
| **口诀** | **`merge`虽乱心不乱,`rebase`虽直易出错** | **`merge`虽乱心不乱,`rebase`虽直易出错** | | ||
|
||
### 趣味小练习 🎮 | ||
|
||
1. 自己创建几个分支,分别用 `git merge` 和 `git rebase` 进行合并,看看有什么不同。 | ||
2. 试着画出两种合并方式的提交历史图,加深理解。 | ||
3. 思考一下,在你的团队项目中,哪种合并方式更适合? | ||
|
||
希望这个文档能帮助你更好地理解 Git Rebase 和 Git Merge!记住,实践出真知,多动手试试,你会发现 Git 其实很有趣!😉 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
## Git 分布式版本控制:代码世界的“多人运动”! 🏃♀️🏃♂️ | ||
|
||
**目的:** 啥是 Git 的“分布式”?别怕,咱们一起玩着就明白了! | ||
|
||
**内容:** | ||
|
||
想象一下,你们团队要一起盖一座乐高城堡 🏰,每个人负责不同的部分: | ||
|
||
* **你:** 负责城堡的大门 (在 `feature/gate` 分支) | ||
* **小伙伴A:** 负责城堡的塔楼 (在 `feature/tower` 分支) | ||
* **小伙伴B:** 负责城堡的围墙 (在 `feature/wall` 分支) | ||
* **GitHub/GitLab/Gitee:** 就像一个乐高积木的仓库,大家可以把自己的乐高零件(代码)放到这里,也可以从这里拿别人分享的零件。 | ||
|
||
#### Git 分布式:每个人都有自己的乐高盒子! 📦 | ||
|
||
* **集中式版本控制 (比如 SVN):** 只有一个中央乐高盒子,每次你想拼乐高,都得从中央盒子拿,拼完了再放回去。如果盒子管理员不在,或者盒子丢了,就完蛋了! | ||
* **Git 分布式版本控制:** 每个人都有一个完整的乐高盒子!你可以在自己的盒子里随便拼,拼好了再和别人的盒子同步。即使中央盒子丢了,也没关系,每个人的盒子里都有完整的备份! | ||
|
||
#### 玩转 Git 分布式,就像拼乐高! | ||
|
||
1. **克隆 (clone):** 从 GitHub/GitLab/Gitee 上把整个乐高城堡的设计图纸复制一份到你的电脑上。 | ||
|
||
```bash | ||
git clone <远程仓库地址> | ||
``` | ||
|
||
2. **分支 (branch):** 每个人都从主设计图纸(`main` 分支)上复制一份,开始搭建自己的部分。 | ||
|
||
```bash | ||
git checkout -b feature/gate # 你创建并切换到 feature/gate 分支,开始搭建城堡大门 | ||
``` | ||
|
||
3. **提交 (commit):** 你拼好了一个乐高积木,觉得很满意,就把它“咔哒”一声固定在你的城堡大门上。 | ||
|
||
```bash | ||
# 拼好了一个乐高积木... | ||
git add . | ||
git commit -m "我拼好了一个超酷的城门吊桥!" | ||
``` | ||
|
||
4. **推送 (push):** 你觉得你的城门吊桥太酷了,想分享给小伙伴们看看,就把你的 `feature/gate` 分支推送到 GitHub/GitLab/Gitee。 | ||
|
||
```bash | ||
git push -u origin feature/gate | ||
``` | ||
|
||
5. **拉取 (pull):** 小伙伴A 搭建好了城堡的塔楼,你想看看他的塔楼长啥样,就把他的 `feature/tower` 分支拉到你的本地。 | ||
|
||
```bash | ||
git pull origin feature/tower | ||
``` | ||
|
||
6. **合并 (merge):** 你觉得小伙伴A 的塔楼很棒,想把它拼到你的城堡上,就把 `feature/tower` 分支合并到你的 `feature/gate` 分支。 | ||
|
||
```bash | ||
git merge feature/tower | ||
``` | ||
|
||
7. **冲突解决 (resolve conflicts):** 糟糕!你和小伙伴A 都想在同一个地方放一个窗户,Git 不知道该听谁的了,就会提示冲突。你需要手动打开“冲突”的乐高积木,决定最终的设计,然后再次“咔哒”一声固定。 | ||
|
||
```bash | ||
# 手动打开冲突的乐高积木,决定最终的设计... | ||
git add . | ||
git commit -m "我和小伙伴A一起决定了窗户的最终位置!" | ||
``` | ||
|
||
8. **合并到主分支 (merge to main):** 你的城堡大门终于完工了!你把它合并到主设计图纸(`main` 分支)上,并推送到 GitHub/GitLab/Gitee。 | ||
|
||
```bash | ||
git checkout main | ||
git merge feature/gate | ||
git push origin main | ||
``` | ||
|
||
### 总结:Git 分布式,就是这么简单! | ||
|
||
* 每个人都有自己的代码仓库,可以离线工作。 | ||
* 通过推送和拉取来同步代码。 | ||
* 用分支来隔离不同的开发任务。 | ||
* 合并分支来整合代码。 | ||
* 解决冲突来确保代码的一致性。 | ||
|
||
### 趣味小挑战 🏆 | ||
|
||
1. 和小伙伴们一起,用 Git 协作完成一个小项目(比如写一篇博客、画一幅画、写一首歌)。 | ||
2. 故意制造一些冲突,看看 Git 是如何提示的,然后一起解决冲突。 | ||
3. 把你的 Git 仓库分享到 GitHub/GitLab/Gitee 上,让更多人看到你的作品! | ||
|
||
掌握了 Git 分布式版本控制,你就可以和全世界的开发者一起玩转代码啦!🌍🎉 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
## Git:本地开发的超级助手!🦸 | ||
|
||
**目的:** 学会用 Git 来管理你的本地项目,就像玩游戏一样轻松切换不同的“存档”! | ||
|
||
**内容:** | ||
|
||
想象一下,你正在开发一个游戏角色 👾,你想尝试不同的技能组合: | ||
|
||
* **方案A:** 火焰 🔥 + 冰冻 ❄️ | ||
* **方案B:** 闪电 ⚡ + 隐身 👻 | ||
* **方案C:** 剧毒 🧪 + 治疗 🌱 | ||
|
||
如果不用 Git,你可能需要创建三个不同的文件夹,分别保存不同的代码。但是有了 Git,一切都变得简单了! | ||
|
||
#### Git 分支:就像游戏的“存档点”! 💾 | ||
|
||
Git 的分支就像是游戏的“存档点”,你可以在不同的存档点之间自由切换,尝试不同的方案,而不用担心搞乱你的代码。 | ||
|
||
#### 玩转 Git 本地分支,只需几步! | ||
|
||
1. **创建分支 (branch):** 为你的每个技能组合创建一个分支。 | ||
|
||
```bash | ||
git branch feature/fire-ice # 创建火焰+冰冻分支 | ||
git branch feature/thunder-stealth # 创建闪电+隐身分支 | ||
git branch feature/poison-heal # 创建剧毒+治疗分支 | ||
``` | ||
|
||
2. **查看分支 (branch):** 看看你都有哪些分支。 | ||
|
||
```bash | ||
git branch | ||
``` | ||
你会看到类似这样的输出: | ||
* feature/fire-ice | ||
feature/poison-heal | ||
feature/thunder-stealth | ||
* main | ||
|
||
`*` 表示你当前所在的分支。 | ||
|
||
3. **切换分支 (checkout):** 在不同的技能组合之间切换。 | ||
|
||
```bash | ||
git checkout feature/thunder-stealth # 切换到闪电+隐身分支 | ||
``` | ||
|
||
现在,你可以在 `feature/thunder-stealth` 分支上修改代码,实现闪电和隐身技能。这些修改不会影响其他分支的代码。 | ||
|
||
4. **提交 (commit):** 在当前分支上修改代码,并提交。 | ||
|
||
```bash | ||
# 修改了一些代码... | ||
git add . | ||
git commit -m "实现了闪电技能的初步效果!" | ||
``` | ||
|
||
5. **合并分支 (merge):** 如果你觉得某个技能组合很棒,想把它合并到主分支(`main` 分支),可以这样做: | ||
|
||
```bash | ||
git checkout main # 切换到 main 分支 | ||
git merge feature/thunder-stealth # 把 feature/thunder-stealth 分支合并到 main 分支 | ||
``` | ||
|
||
6. **删除分支 (branch -d):** 如果你觉得某个技能组合不怎么样,或者已经合并到 `main` 分支了,可以删除它: | ||
|
||
```bash | ||
git branch -d feature/fire-ice # 删除 feature/fire-ice 分支 | ||
``` | ||
|
||
### 总结:Git 本地分支,就是这么好用! | ||
|
||
* 你可以创建多个分支,分别开发不同的功能或尝试不同的方案。 | ||
* 你可以随时切换分支,就像切换游戏的存档点一样。 | ||
* 你可以把满意的分支合并到主分支,也可以删除不需要的分支。 | ||
|
||
### 趣味小挑战 🕹️ | ||
|
||
1. 在你的一个项目中(比如你的作业、你的博客、你的小游戏),创建几个分支,分别尝试不同的修改。 | ||
2. 试着在不同的分支上修改同一个文件的同一部分,然后切换分支,看看会发生什么。 | ||
3. 画出你的项目的分支图,看看它像什么(一棵树?一张网?)。 | ||
|
||
有了 Git,你的本地开发就像开了挂一样!你可以大胆尝试各种想法,再也不用担心把代码搞乱了!🚀 |