扔物线Git小册笔记

这篇博客是从扔物线大神的Git掘金小册上小结下来的,想了解更多内容请去掘金购买

版本控制系统的核心

版本控制/主动提交/中央仓库

分布式版本控制系统和中央式的区别

中央式的版本控制系统:保存版本信息/同步团队代码
分布式:通过本地仓库来保存版本信息,中央仓库用来同步代码,不过依然会保存版本信息,但这份历史版本更多的是作为团队间的同步中转站。

分布式版本控制系统(VCS)的优缺点

优点

  1. 大多数操作是在本地进行,速度更快,且不用联网。
  2. 可以分布提交代码,可以把代码提交做得更细,而不是一个提交包含很多代码。导致难以回溯(review)

缺点

  1. 由于每个机器都有完整的本地仓库,所以初次获取(Git:clone)会比较耗时。
  2. 由于每个机器都有完整的本地仓库,所以本地存储会比中央式要高。

Git最基本的工作模型

  1. 从GitHub/Gitee把中央仓库clone到本地(git clone
  2. 把写完的代码提交
    • git add 文件把文件添加到缓存区
    • git commit 提交到本地仓库
    • 在此过程中使用git status来查看工作目录的状态
    • 每个文件有“change/unstaged”(已修改)/“staged”(已修改并暂存)/“commited”(已提交)/“untracked”(未追踪)
  3. 提交一次或多次后,把本地提交push到中央仓库(git push)

Git中的引用

  1. HEAD:当前commit的引用
  2. branch 分支
  3. master默认的branch

branch

  1. 创建branch(git branch branch1xx)
  2. 切换branchgit checkout branch1xx
  3. 创建并切换到branch(git checkout -b branch1xx)
  4. 删除branchgit branch -d branch1xx

扔物线大神的小结:
1. HEAD 是指向当前 commit 的引用,它具有唯一性,每个仓库中只有一个 HEAD。在每次提交时它都会自动向前移动到最新的 commit 。
2. branch 是一类引用。HEAD 除了直接指向 commit,也可以通过指向某个 branch 来间接指向 commit。当 HEAD 指向一个 branch 时,commit 发生时,HEAD 会带着它所指向的 branch 一起移动。…
3. master 是 Git 中的默认 branch,它和其它 branch 的区别在于
- 新建的仓库中的第一个 commit 会被 master 自动指向;
- 在 git clone 时,会自动 checkout 出 master。
4. branch 的创建、切换和删除:
- 创建 branch 的方式是 git branch 名称 或 git checkout -b 名称(创建后自动切换);
- 切换的方式是 git checkout 名称;
- 删除的方式是 git branch -d 名称。

merge: 合并commits

  1. 适用场景
    • 合并分支
    • pull的内部操作
  2. 放弃解决冲突,取消merge(git merge --abort)

扔物线大神的小结
1. merge 的含义:从两个 commit「分叉」的位置起,把目标 commit 的内容应用到当前 commit(HEAD 所指向的 commit),并生成一个新的 commit;
2. merge 的适用场景:
- 单独开发的 branch 用完了以后,合并回原先的 branch;
- git pull 的内部自动操作。
3. merge 的三种特殊情况:
- 冲突
原因:当前分支和目标分支修改了同一部分内容,Git 无法确定应该怎样合并;
应对方法:解决冲突后手动 commit。
- HEAD 领先于目标 commit:Git 什么也不做,空操作;
- HEAD 落后于目标 commit:fast-forward。…

Feature Branching:最流行的工作流

  1. 核心内容:
    1. 任何新功能或者bug修复都创建新的branch来写/
    2. branch写完后,合并到master,然后删掉这个branch

git add . 直接将工作目录下的所有改动全部放进暂存区。

git log 查看历史记录

参数配置:
- git log -p 查看详细历史
- git log --stat查看简要统计
- git show查看具体的commit
- git diff查看未提交的内容

git rebase 改变commit序列的基础点

git rebase 目标基础点
rebase是站在需要被rebase的commit上进行操作的,这点和merge不同

commit –amend 对最新的一条commit进行修正

注意:commit --amend不是直接修改原commit内容,而是生成一条新的commit

rebase -i 交互式rebase

使用方式是 git rebase -i 目标commit;
在编辑界面中指定需要操作的 commits 以及操作类型;
操作完成之后用 git rebase –continue 来继续 rebase 过程。

撤销最新的提交

git reset --hard 目标commit

撤销不是最新的请求

  1. git rebase -i在编辑界面中删除想撤销的 commits
  2. git rebase --onto在 rebase 命令中直接剔除想撤销的 commits
    方法有两种,理念是一样的:在 rebase 的过程中去掉想撤销的 commit,让他它消失在历史中。
展开阅读全文

没有更多推荐了,返回首页