一个学习git的网站,本文便是攻略。看一个个对话框也怪费时间的,整理一篇出来,看得清晰点。
一、基础篇:循序渐进地介绍 Git 主要命令
1. Git Commit
如果说一个项目开发过程中所有的提交记录构成一个树,那么commit 命令就是树的一个个节点。首先游戏界面是这样的,第一关要求我们提交两次,也就是创建两个节点。
git commit -m "提交记录,创建节点c2"
: 执行后就创建了c2节点
git commit -m "提交记录,创建节点c3"
: 执行后就创建了c3节点
OK ,你成功通过第一副本的第一关卡
2. Git Branch
如果说commit 提交出一个个节点,一直下去,那他就是一柱擎天。树嘛,总是要开枝散叶,branch 就能让它发一个枝
git branch bugFix
:这样我们的树就在master中发芽了,但也只是萌发
git checkout bugFix
:通过checkout切换到当前枝,然后bugFix枝就可以生长了
虽然关卡,这里就结束了,不过为了更形象,这里在bugFix枝中提交一次看看
3. Git Merge
当一个bug被修复后,一条枝的使命就完成了,这时就可以将它合并到主支上。
该副本过程是新建一个分支,然后将其合并到主支上。
git checkout -b bugFix
: 可以直接checkout -b来创建分支并切至
git commit -m "修复bug"
:当bug修复完毕,就可以将其提交
git checkout master
:然后切回主支
git commit -m "bug修复完毕,主线提交"
:在主支提交后出现c3节点
git merge bugFix
: 通过merge命令可以指定分支合并到当前支m主分支会产生c4
4. Git rebase
第二种合并分支的方法是 git rebase。Rebase实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。
git checkout -b bugFix
git commit -m "修复bug"
git checkout master
git commit -m "bug修复完毕,主线提交"
git checkout bugFix
git rebase master
复制代码
二、高级篇
HEAD 总是指向当前分支上最近一次提交记录。
复制代码
1.分离HEAD : 从 bugFix 分支中分离出 HEAD 并让其指向一个提交记录
使用checkout 可以切换到一个节点,此时记录头HEAD指向该节点
git checkout C4
: 记录头HEAD指向C4
虽然该副本就此结束,但是我还是忍不住再提交一个记录看看,可见生成了C5并且头下移
2.相对引用^
每个节点都有一个SHA1值与之对应,而我们可以通过该SHA1值回到某个节点,但SHA1太长了,可以使用
^
上移一步。
该副本需要:切换到 bugFix 的父节点,初始如下:
git checkout bugFix^
:切换到 bugFix 的父节点
虽然该副本就此结束,但是我还是忍不住再提交一个记录看看,可见下该头之下生成了C5并且头下移
3.相对引用~
如果要移动多步,用
^
就比较繁琐,这时可以使用~
来指定上移多少步
该副本需要:移动 HEAD,master 和 bugFix 到目标所示的位置。
可见结果中master指到C6,bugFix移到C0,HEAD指向C1
git branch -f master C6
:会将 master 分支强制指向C6
git checkout HEAD~1
:会将头标上移一个到C1
git branch -f bugFix HEAD~1
: 会将 bugFix 分支强制指向头标的上一位,即C0。本关通过。
4.撤销变更
git reset 通过把分支记录回退几个提交记录来实现撤销改动(远程分支是无效)
git revert 为了撤销更改并分享给别人,需要使用 git revert
复制代码
该副本需要:分别撤销 local(本地) 分支和 pushed(远程) 分支上的最近一次提交。 初始如下:
git reset HEAD~1
:local(本地) 分支撤销一步到达C1
git checkout pushed
:将分支切到pushed(远程) 分支
git revert HEAD
: 此时 C2' 的状态与 C1 是相同的,达到撤销目的
Ok,这样你就会了Git的90%,就像天才是百分之九十九的努力和百分之一的灵感,然而那百分之一却是你最大的门槛....
三、整理提交记录
1.Git cherry-pick
git cherry-pick <提交号>...
如果你想将一些提交复制到当前所在的位置(HEAD)下面的话,记住 cherry-pick
复制代码
该副本需要: 将三个分支中的提交记录复制到 master 上,下面看起来挺复杂,不过别怕:
git cherry-pick C3 C4 C7
: 将 C3 C4 C7复制到,当前所在的位置(master)
怎么样,就这么简单。
2.Git rebase
你知道录提交记录的SHA1值时, 用 cherry-pick 再好不过。
but, 但是如果不清楚你想要的提交记录的哈希值呢? 记住: rebase
交互式 rebase 指的是使用带参数 --interactive 的 rebase 命令, 简写为 -i
复制代码
该副本需要:将C3,C5,C4节点依次拷贝至C1下
git rebase -i overHere
:就可以打开一个交互面板。
OK ,讲得也挺多的,之后的知识。下篇见,Bye。以前也写过一篇:杂篇:一首诗认识[- Git -]