这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
认识
Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等
和SVN的区别:
- 相较于SVN,Git是分布式的
- **Git 把内容按元数据方式存储,而 SVN 是按文件:**所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里
- Git 没有一个全局的版本号,而 SVN 有
- Git 的内容完整性要优于 SVN
初始化
初始化 or 从远程仓库拉下代码
git init
git clone <url of repo>
被git管理的文档提交到本地仓库中
git add <file>
git commit -m <msg>
提交
git push origin main
(将本地内容提送到 origin主机的main分支
拉下最新代码,并合并(更新本地代码
git pull 命令用于从远程获取代码并合并本地的版本
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin main:yourbranch
如果远程分支是与当前分支合并,则冒号后面的部分可以省略
git pull origin main
此命令相当于 git fetch 后跟 git merge 命令
git fetch origin
git merge origin/main
从主机origin取回main分支,再与当前分支合并
分支
git branch [<options>] <branch-name>
-d, --delete delete fully merged branch
git checkout [<options>] <branch>
-b <branch> create and checkout a new branch
git branch <name> 创建新分支,-d选项删除这个分支
不同分支对应不同开发提交流程
合并
git merge [<options>] [<commit>...]
--ff allow fast-forward (default)
--ff-only abort if fast-forward is not possible
--no-verify bypass pre-merge-commit and commit-msg hooks
—ff-only模式,即快速前进合并,要求当前branch和目标分支是线性的,这样合并不会创建新的commit节点,而是用最新的节点
–no-ff模式,即three way merge模式,新生成一个commit节点,把两个分支都合并到这个新节点上。
rebase
切出分支后,主分支也有改动,此时不能用 -ff合并,因为主分支已经更新了
rebase就是把切除分支的改动在主分支上前移到最新节点,然后就可以ff合并了