最近在某互联网公司实习,日常工作经常会使用到 Git,因为团队协作离不开Git,所以对于新人来说,我们需要对 Git 的基本操作非常熟悉,并且对其基本原理有一定的把握。本章将主要介绍 Git 的基本概念和操作,在之后的章节中我们也会对 GitLab 的配置做详细的介绍,因为公司团队协作用的主要就是 GitLab。
Git快速入门篇
1. Git基础
Git是一款分布式版本控制工具,常用于管理软件代码版本。
1.2 Git文件的状态
未加入Git | 工作区Working Directory | 暂存区Staging Area | 本地仓库Repository |
---|---|---|---|
未跟踪或者被.gitignore忽略的文件 | 修改过的且被Tracked的文件 | 修改过的文件在 git add 之后会暂存到暂存区。暂存区的文件会形成快照,为后面提交做准备。 | 暂存区的文件在 git commit 之后会保存到本地仓库,并形成 commit 信息,包括:完整快照、时间、提交人信息、log等。 |
未跟踪的文件通常显示为红色 | 工作区的文件通常显示为红色 | 暂存区的文件通常显示为绿色 | |
Untracked(未跟踪) | Modified(已修改) | Staged(已暂存) | Committed(已提交) |
1.3 本地仓库和远程仓库
1.4 分支Branch
分支是 Git 中最重要的概念,通常每个仓库都有一个 master 分支。
- 分支可以让工作并行,不同分支的工作不会相互影响
- 两个分支合并时可能会出现冲突,解决冲突之后才能完成合并
2. Git常用命令
2.1 Create repositories
git init
Turn an existing directory into a git repository
将当前的文件夹初始化为 git 本地仓库
git clone
Clone a repository that exists on GitHub, including all of the files, branches, and commits
将 GitHub 上的仓库拷贝到本地
2.2 .gitignore
The .gitignore
file are used to exclude files from being tracked with Git.
gitignore
文件用来设置一些文件不被 Git 所管理。
2.3 Branches
CMD | Function |
---|---|
git branch [branch-name] | 新建分支 |
git checkout [branch-name] | 切换到指定分支 |
git merge [branch-name] | 合并指定分支到当前分支 |
git branch -d [branch-name] | 删除指定分支 |
2.4 Snchronize changes
CMD | Function |
---|---|
git fetch | 从远程分支下载所有历史记录 |
git merge | 合并远程分支到当前本地分支 |
git push | 上传本地分支的 commits 到 GitHub |
git pull | 更新本地工作分支,使其与远程相应的分支同步,它是 git fetch 和 git merge 的结合 |
3. Git Workflow
经典分支模型:
分支 | 说明 | 命名规范 | checkout from | merge to |
---|---|---|---|---|
master | 主干,最稳定的分支,可随时用作release发版,只能从其他分支合入,不能在上面做任何提交 | |||
develop | 开发主干,是稳定的最新的分支。主要合并其他的分支如 feature 分支和 bugfix 分支 | |||
feature | 新功能分支 | feature/* | develop | develop |
release | 发布分支,对应一次新版本的发布,只接受 bugfix | release/* | develop | develop, master |
hotfix | 紧急修复分支,生产环境中发现的紧急 bug 的修复 | hotfix/* | master, release | develop, master |
4. 经典场景
4.1 多人协作
基本步骤如下:
- 克隆仓库
- 如果远程分支被其他人的分支合并更新,则需要拉取远程分支,合并更新当前的本地分支
- 推送更新
4.2 回滚
命令 | 方法 | 描述 |
---|---|---|
git reset [hashValue] | 恢复到某一次提交 | 将该次提交之后的所有提交都丢弃(HEAD 指针会移动到指定的那一次提交,并丢弃之后的提交) |
git revert [hashValue] | 恢复某一次提交 | 将某一次提交的修改恢复回去(HEAD 指针会在当前提交之后创建一个新的提交并移动到该位置,该新的提交的状态与指定的某一次的提交的状态一致) |
git reflog | 与 git reset 结合使用 | 用 git reflog 查看所有 git 相关操作的记录,包括对应的 Hash 值,然后搭配 git reset 可以恢复到任意位置 |
4.3 重写历史
命令 | 描述 |
---|---|
git commit –amend | 修改最后一次提交 |
git rebase -i | 1. 修改多个提交信息 2. 重新排序提交 3. 压缩提交 4. 拆分提交 |
Git 相关资料
Git 官方手册——https://git-scm.com/docs