进阶 1 - HEAD、master 与 branch:
介绍了 Git 中的一些「引用」:HEAD
、master
、branch
。这里总结一下:
-
HEAD
是指向当前commit
的引用,它具有唯一性,每个仓库中只有一个 HEAD。在每次提交时它都会自动向前移动到最新的commit
。 -
branch
是一类引用。HEAD
除了直接指向commit
,也可以通过指向某个branch
来间接指向commit
。当HEAD
指向一个branch
时,commit
发生时,HEAD
会带着它所指向的branch
一起移动。 -
master
是 Git 中的默认branch
,它和其它branch
的区别在于:- 新建的仓库中的第一个
commit
会被master
自动指向; - 在
git clone
时,会自动checkout
出master
。
- 新建的仓库中的第一个
-
branch
的创建、切换和删除:- 创建
branch
的方式是git branch 名称
或git checkout -b 名称
(创建后自动切换); - 切换的方式是
git checkout 名称
; - 删除的方式是
git branch -d 名称
。 - 删除其他机器上的远程分支和本地分支。
git fetch -p
和git branch -a
- 创建
进阶 2 - push 的本质:
介绍了 push
这个指令的本质。总结一下关键点:
-
push
是把当前的分支上传到远程仓库,并把这个branch
的路径上的所有commit
s 也一并上传。 -
push
的时候,如果当前分支是一个本地创建的分支,需要指定远程仓库名和分支名,用git push origin branch_name
的格式(等同于git push origin feature1:feature1
本地分支名和远程的不必相等),而不能只用git push
;或者可以通过git config
修改push.default
来改变push
时的行为逻辑。 -
push
的时候之后上传当前分支,并不会上传HEAD
;远程仓库的HEAD
是永远指向默认分支(即master
)的。
进阶 3 - merge:合并 commits:
对 merge
进行了介绍,内容大概有这么几点:
-
merge
的含义:从两个commit
「分叉」的位置起,把目标commit
的内容应用到当前commit
(HEAD
所指向的commit
),并生成一个新的commit
; -
merge
的适用场景:- 单独开发的
branch
用完了以后,合并回原先的branch
; -
git pull
的内部自动操作。
- 单独开发的
-
merge
的三种特殊情况:- 冲突
- 原因:当前分支和目标分支修改了同一部分内容,Git 无法确定应该怎样合并;
- 应对方法:解决冲突后手动
commit
。 - 放弃解决冲突,取消
merge
。未commit
前git merge --abort
-
HEAD
领先于目标commit
:Git 什么也不做,空操作; -
HEAD
落后于目标commit
:fast-forward。(相当于pull
)
- 冲突
进阶 4 - Feature Branching:最流行的工作流:
介绍了 Feature Branching 这种工作流。它的概念很简单:
- 每个新功能都新建一个
branch
来写;- 基于远程master分支切出一个新分支
- 分别
git checkout master
,git checkout -b new_feature
- 简洁操作
git checkout -b new_feature origin/master
- 分别
- 基于远程master分支切出一个新分支
- 写完以后,把代码分享给同事看;写的过程中,也可以分享给同事讨论。另外,借助 GitHub 等服务提供方的 Pull Request 功能,可以让代码分享变得更加方便;
- 分支确定可以合并后,把分支合并到
master
,并删除分支。- 删除本地分支
git branch -d feature
- 删除远程分支
git push origin -d feature
# 用-d
参数把远程仓库的branch
也删了
- 删除本地分支
这种工作流由于功能强大,而且概念和使用方式都很简单,所以很受欢迎。再加上 GitHub 等平台提供了 Pull Request 的支持,目前这种工作流是商业项目开发中最为流行的工作流。
进阶 5 - 关于 add:
通过 add
来把改动的内容放进暂存区
-
add
后面加个点 ".":全部暂存 -
add
添加的是文件改动,而不是文件名
进阶 5 - 看看我都改了什么:
介绍了一些查看改动内容的方法,大致有这么几类:
- 查看历史中的多个
commit
:log
- 查看详细改动:
git log -p
- 查看大致改动:
git log --stat
- 查看详细改动:
- 查看具体某个
commit
:show
- 要看最新 commit
,直接输入
git show ;要看指定commit
,输入git show commit的引用或SHA-1
- 如果还要指定文件,在
git show
的最后加上文件名
- 要看最新 commit
- 查看未提交的内容:
diff
- 查看工作目录和暂存区的区别:
git diff
不加选项参数 - 查看工作目录和上一条
commit
的区别:git diff HEAD
- 查看暂存区和上一条
commit
的区别:git diff --staged
(或--cached
)
- 查看工作目录和暂存区的区别:
网友评论