commit:
git commit
commit 表示对于⼀次改动的提交,它可以代表当前时刻下 Git 仓库的完整快照,但 本质上,commit 只是记录了距离上⼀次 commit 之间的改动。
staging area 暂存区和 add:
git add README.md
- staging 原意:舞台表演前的筹划准备(例如汇集道具和演员)。Git 中的意 思:把改动内容汇集起来以待提交。
- staging area:待提交的修改内容暂时存放的地⽅。主要⽤于和已经改动但不打 算提交的内容区分开来。
- add 指令:把指定的内容放进暂存区
branch 和 master:
- branch 的含义是分⽀,指的是仓库结构出现分叉时的不同的「叉」
- 本质上,git 的 branch 是引⽤(reference),即指向某个 commit 的指针
- master 是⼀个特殊的 branch,因为它是 Git 的默认 branch(默认 branch 可 以修改)。默认 branch 的特点: 执⾏ clone ⽅法把仓库取到本地的时候,默认 checkout 出来的是默认 branch,即 master; 在执⾏ push 命令把本地内容推送到远端仓库的时候,远端仓库的 HEAD 永 远跟随默认 branch,⽽不是和本地 HEAD 同步。换句话说,只有 push master 分⽀到远端的时候,远端的 HEAD 才会移动。
HEAD:
- HEAD 也是引⽤,但它不是 branch,它代表了当前所处的位置。HEAD 不仅可 以指向某个 commit,也可以指向某个 branch(例如 master、feature1)
- 当每次 commit 的时候,HEAD 不仅随着新的 commit ⼀起移动,⽽且如果它指 向了某个 branch,那么它也会带着 branch ⼀起移动
commit 前
commit 后
clone:
git clone https://github.com/rengwuxian/git-demo.git
clone 是从远端仓库初次把数据取下来,clone 命令具体会做两件事:
- 把整个仓库中的所有 branch 取下来,并把从初始 commit 到达这些 branch 的 路径上的所有 commit 都取下来
- 从初始 commit 开始,向 master 指向的 commit,⼀个个地把每个 commit 应 ⽤,最终得到⼀个「当前」状态的仓库内容,写进 Git 所在的⽬录(这个⽬录叫 做 working tree)
log:
git log
从 HEAD 指向的 commit 开始,倒序显示每⼀个 commit 的摘要信息
merge:
git merge feature1
merge 就是合并,它会把当前 commit 和指定 commit(所谓 commit,可以直接⽤ 它的 hash 值来指定,例如 4a0a1b ,也可以⽤⼀个直接或间接指向它的引⽤来指 定,例如 master 或者 HEAD )进⾏合并,并把这个合并⾏为创建成⼀个新的 commit。merge ⾏为所产⽣的 commit,是⼀种特殊的 commit:
- 它不需要有改动,只要指定两个(或更多个)⽗ commit 就好
- 正如上⾯这句说的,它有两个或更多个⽗ commit,这是⼀般的 commit 不具有 的性质
merge 冲突 :
当 Git 不知道怎么合并某两处冲突的修改时,会中断⾃动合并,并对冲突⽂件进⾏标 记。解决⽅法:
- 把⽂件⼿动修改好
- 把修改的内容使⽤ add 来添加进暂存区
- ⽤ git merge --continue 来继续⾃动合并流程
- 关于 origin/ 打头的 branch
本地仓库中,有⼀些以 origin/ 打头的 branch,它们是远端仓库(别名为 origin)的本地镜像。它们的作⽤是⽅便在本地查看远端仓库的 branch 状态。 远端仓库默认名称是 origin,但也可以给它们起别的名称 origin/ 分⽀并不在本地直接操作,它们⼀般只在两种情况下会进⾏⾃动更新:
- 在执⾏ push 的时候,push 成功后,push 成功的 branch 会把它对应的 origin/ branch 更新到当前 commit(因为远端的 branch 已经随着 push 的 成功⽽更新,所以本地镜像也⼀起更新)
- 在执⾏ pull 或者 fetch 的时候,由于从远端拿到了所有最新的 branch 状态,所 以也会⼀同更新所有的 origin/ branch 关于 origin/HEAD:这是⼀个永远跟随 origin/master 的引⽤,它最⼤的作⽤ 是⽤来标记默认 branch
push:
git push origin feature1
把当前 branch 推送到远端仓库的指定分⽀。 具体做两件事:
- 把 HEAD 所指向的 branch (只是⼀个引⽤哦)推送到远端仓库
- 从这个 branch 向前回溯,远端仓库缺少的每⼀个 commit 也推送到远端仓库。
- 将 push 的 branch 的本地镜像 origin/xxx 更新
pull:
git pull origin feature1
把远端 branch 取到本地。 具体做的事有三件:
- 把远端所有 branch 的最新位置更新到本地的 origin/xxx 镜像
- 要到达这些 branch,本地所缺少的所有 commit,也取到本地
- 把 origin/当前branch 的内容合并到当前 branch
事实上,`git pull origin feature1 会分成两部执⾏,它等价于下⾯两⾏:
git fetch
git merge origin/feature1