一个学习git的网站,本文即是攻略。看一个个对话框也怪费时间的,整理一篇出来,看得清晰点。java
按部就班地介绍 Git 主要命令
若是说一个项目开发过程当中全部的提交记录构成一个树,那么commit 命令就是树的一个个节点。首先游戏界面是这样的,第一关要求咱们提交两次,也就是建立两个节点。git
git commit -m "提交记录,建立节点c2"
: 执行后就建立了c2节点bash
git commit -m "提交记录,建立节点c3"
: 执行后就建立了c3节点markdown
OK ,你成功经过第一副本的第一关卡oop
若是说commit 提交出一个个节点,一直下去,那他就是一柱擎天。树嘛,老是要开枝散叶,branch 就能让它发一个枝post
git branch bugFix
:这样咱们的树就在master中发芽了,但也只是萌发学习
git checkout bugFix
:经过checkout切换到当前枝,而后bugFix枝就能够生长了测试
虽然关卡,这里就结束了,不过为了更形象,这里在bugFix枝中提交一次看看网站
当一个bug被修复后,一条枝的使命就完成了,这时就能够将它合并到主支上。
该副本过程是新建一个分支,而后将其合并到主支上。spa
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
第二种合并分支的方法是 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 老是指向当前分支上最近一次提交记录。
复制代码
使用checkout 能够切换到一个节点,此时记录头HEAD指向该节点
git checkout C4
: 记录头HEAD指向C4
虽然该副本就此结束,可是我仍是忍不住再提交一个记录看看,可见生成了C5而且头下移
^
每一个节点都有一个SHA1值与之对应,而咱们能够经过该SHA1值回到某个节点,但SHA1太长了,可使用
^
上移一步。
该副本须要:切换到 bugFix 的父节点,初始以下:
git checkout bugFix^
:切换到 bugFix 的父节点
虽然该副本就此结束,可是我仍是忍不住再提交一个记录看看,可见下该头之下生成了C5而且头下移
~
若是要移动多步,用
^
就比较繁琐,这时可使用~
来指定上移多少步
该副本须要:移动 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。本关经过。
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%,就像天才是百分之九十九的努力和百分之一的灵感,然而那百分之一倒是你最大的门槛....
git cherry-pick <提交号>...
若是你想将一些提交复制到当前所在的位置(HEAD)下面的话,记住 cherry-pick
复制代码
该副本须要: 将三个分支中的提交记录复制到 master 上,下面看起来挺复杂,不过别怕:
git cherry-pick C3 C4 C7
: 将 C3 C4 C7复制到,当前所在的位置(master)
怎么样,就这么简单。
你知道录提交记录的SHA1值时, 用 cherry-pick 再好不过。
but, 可是若是不清楚你想要的提交记录的哈希值呢? 记住: rebase
交互式 rebase 指的是使用带参数 --interactive 的 rebase 命令, 简写为 -i
复制代码
该副本须要:将C3,C5,C4节点依次拷贝至C1下
git rebase -i overHere
:就能够打开一个交互面板。
OK ,讲得也挺多的,以后的知识。下篇见,Bye。之前也写过一篇:杂篇:一首诗认识[- Git -]
通过上篇,你必定对git 有所了解了,本文再也不是攻略,而是一个实际测试:
git init mixed
: 将mixed文件夹使用git管理
git add HelloWorld.java
:添加文件,git add .
会添加文件夹内全部文件
---->[在mixed文件夹建立HelloWorld.java文件]---- public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } } 复制代码
toly:mixed mac$ git commit -m "HelloWorld 初始项目" [master(根提交) 0eb09bc] HelloWorld 初始项目 1 file changed, 7 insertions(+) create mode 100644 HelloWorld.java 复制代码
git commit -m "提交的描述"
下面是提交后的反馈,0eb09bc
表明惟一的SHA1,用于节点的身份标识
可见第一次提交以后会造成一个master主支和HEAD节点。
在代码里添加一个string2Int的方法,而后进行测试。
public class HelloWorld { public static void main(String[] args) { int result = string2Int("1994"); System.out.println(result); } private static int string2Int(String num) { return Integer.parseInt(num); } } 复制代码
结果表现良好,如今你要去睡觉了。
每晚躺床第一句,代码没提赶快去
。
看到了节点增长完成,你就安心地睡觉了
toly:mixed mac$ git add . toly:mixed mac$ git commit -m "增长字符串转数字功能" [master 0c4056a] 增长字符串转数字功能 1 file changed, 6 insertions(+), 1 deletion(-) 复制代码
而后你思来想去,不行,还没加注释呢,明早起来看不懂了怎么办?
public class HelloWorld { public static void main(String[] args) { int result = string2Int("1994");//使用方法 System.out.println(result);//打印 } /** * 将一个字符串转化成数字 * @param num 待转字符串 * @return 数字 */ private static int string2Int(String num) { return Integer.parseInt(num); } } 复制代码
因而你修改了文件,添加注释,再提交,成功出现第三个节点,终于能够安心睡觉了。
toly:mixed mac$ git add . toly:mixed mac$ git commit -m "增长注释" [master dcf9cd3] 增长注释 1 file changed, 7 insertions(+), 3 deletions(-) 复制代码
这时你发现有bug,转换"aaa"有异常。修复bug,先建分支,以避免改废了影响主支。
git checkout -b bugFix
,这样就能够建立分支,并切换到该分支,你就能够愉快地抓小虫了,用导弹,大炮,原子弹什么的轰炸bug,都不会影响到你的主支。
toly:mixed mac$ git checkout -b bugFix 切换到一个新分支 'bugFix' 复制代码
以后通过不懈努力,修复了bug,其间提交了两次,加了异常捕捉。
toly:mixed mac$ git add . toly:mixed mac$ git commit -m "修复bug提交点1" [bugFix 246b11f] 修复bug提交点1 1 file changed, 13 insertions(+), 5 deletions(-) toly:mixed mac$ git add . toly:mixed mac$ git commit -m "修复bug提交点2" [bugFix f9299a6] 修复bug提交点2 1 file changed, 1 insertion(+) 复制代码
public class HelloWorld { public static void main(String[] args) { int result = string2Int("1994");//使用方法 System.out.println(result);//打印 } /** * 将一个字符串转化成数字 * @param num 待转字符串 * @return 数字 */ private static int string2Int(String num) { int result =0; try { result = Integer.parseInt(num); } catch (NumberFormatException e) { System.out.println("喵了个咪,给老子传数字"); e.printStackTrace(); } finally { } return result; } } 复制代码
如今仍在bugFix分支,既然bug已修复,那就回到master主支继续开发,而且将bugFix支合并到主支上
toly:mixed mac$ git checkout master 切换到分支 'master' toly:mixed mac$ git merge bugFix 更新 dcf9cd3..f9299a6 Fast-forward HelloWorld.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) 复制代码
经过
git branch
能够查看当前分支状况,若是想看更多信息,加-v
toly:mixed mac$ git branch
bugFix
* master
toly:mixed mac$ git branch -v
bugFix f9299a6 修复bug提交点2
* master f9299a6 修复bug提交点2
复制代码
一个bug解决了,该分支也没有必要了,就能够删除分支。
toly:mixed mac$ git branch -d bugFix 已删除分支 bugFix(曾为 f9299a6)。 复制代码
这样一套流程下来,bugFix既不会影响主线的代码,在bug修复后合并删除,也就至关于bugFix从未出现过同样。bug 如此,feature 也同样,在某种意义上,二者是很是相似的。(从不写bug的人,手动滑稽)
若是你想查看日志,能够经过
git reflog
或git log
toly:mixed mac$ git reflog f9299a6 (HEAD -> master) HEAD@{0}: merge bugFix: Fast-forward dcf9cd3 HEAD@{1}: checkout: moving from bugFix to master f9299a6 (HEAD -> master) HEAD@{2}: commit: 修复bug提交点2 246b11f HEAD@{3}: commit: 修复bug提交点1 dcf9cd3 HEAD@{4}: checkout: moving from master to bugFix dcf9cd3 HEAD@{5}: commit: 增长注释 0c4056a HEAD@{6}: commit: 增长字符串转数字功能 0eb09bc HEAD@{7}: commit (initial): HelloWorld 初始项目 复制代码
toly:mixed mac$ git log commit f9299a6fe2e1e04fe5e334288fee737ebbf8d7b5 (HEAD -> master) Author: toly <1981462002@qq.com> Date: Sat Sep 28 14:45:36 2019 +0800 修复bug提交点2 commit 246b11fac86392f55a83feb41f6e674d644074a3 Author: toly <1981462002@qq.com> Date: Sat Sep 28 14:43:53 2019 +0800 修复bug提交点1 commit dcf9cd3244926e2e3113713bc1465b823038fcdc Author: toly <1981462002@qq.com> Date: Sat Sep 28 14:31:08 2019 +0800 增长注释 commit 0c4056af93721074324544ba4b562061e442dccd Author: toly <1981462002@qq.com> Date: Sat Sep 28 14:21:11 2019 +0800 增长字符串转数字功能 commit 0eb09bc5abc9c4f42401cf543306fe485e17acfa Author: toly <1981462002@qq.com> Date: Sat Sep 28 14:04:16 2019 +0800 HelloWorld 初始项目 复制代码
git 最强大的功能之一在于能够版本回溯,让你能在前线奋勇杀敌,没有后顾之忧。
大不了搞很差,再退回来呗。若是你debug搞得一团糟,轻轻来一句:
git reset --hard 0c4056a
复制代码
Git还有很是多的特性,这里主要是想让你对Git一个形象的认识,后面的路,还要本身走。