git 学习 | 青训营笔记

69 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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合并,因为主分支已经更新了

img 图片参考

rebase就是把切除分支的改动在主分支上前移到最新节点,然后就可以ff合并了

img 图片参考