1)分支:
>git branch -m master mymaster
-m参数告诉Git要执行分支移动(重命名)操作。另外两个参数分别是分支原名称和新名称。
>git branch
查看分支。该命令没有参数,Git显示本地版本库中所有的本地分支名称。
结果中,前面带星号的分支是当前检出的分支,即当前工作目录树的分支。
2)创建分支的时机:
①实验性更改:
②增加新功能:
③Bug修复:
3)创建分支的命令:
>git branch new
创建分支命令git branch后,加上新的分支名称。
>git branch 查看分支
>git branch -m master mymaster
-m参数告诉Git要执行分支移动(重命名)操作。另外两个参数分别是分支原名称和新名称。
>git branch
查看分支。该命令没有参数,Git显示本地版本库中所有的本地分支名称。
结果中,前面带星号的分支是当前检出的分支,即当前工作目录树的分支。
2)创建分支的时机:
①实验性更改:
②增加新功能:
③Bug修复:
3)创建分支的命令:
>git branch new
创建分支命令git branch后,加上新的分支名称。
>git branch 查看分支
创建的快捷方式:
>git checkout -b alternate master
git checkout 命令后加上参数-b,就可以一步完成创建分支并检出该分支。
4)在其他版本控制工具中,检出有时是指把某个文件的某个版本检出,有时是指把版本库的某个中体版本检出。
在Git中,检出是指把版本库的某个整体版本检出。如果命令参数是分支,就把分支末梢的版本检出,同时设定,将来提交改动时,提交到该分支上。
5)分支合并:即把两条或多条分支合并到一起。
①直接合并:把李那条分支上的历史轨迹合并,交汇到一起。
②压合合并:将一条分支上的若干个提交条目压合成一个提交条目,提交到另一条分支的末梢。要小心使用压合提交,因为大多数情况下,每个提交都应该作为一个单独的条目存在于里式记录中。如果某条分支上的所有提交都密切相关,应随后作为一个整体记录时,适合做压合提交。
③拣选合并:拣选另一条分支上的某个提交条目的改动带到当前分支上。
>git checkout -b alternate master
git checkout 命令后加上参数-b,就可以一步完成创建分支并检出该分支。
4)在其他版本控制工具中,检出有时是指把某个文件的某个版本检出,有时是指把版本库的某个中体版本检出。
在Git中,检出是指把版本库的某个整体版本检出。如果命令参数是分支,就把分支末梢的版本检出,同时设定,将来提交改动时,提交到该分支上。
5)分支合并:即把两条或多条分支合并到一起。
①直接合并:把李那条分支上的历史轨迹合并,交汇到一起。
②压合合并:将一条分支上的若干个提交条目压合成一个提交条目,提交到另一条分支的末梢。要小心使用压合提交,因为大多数情况下,每个提交都应该作为一个单独的条目存在于里式记录中。如果某条分支上的所有提交都密切相关,应随后作为一个整体记录时,适合做压合提交。
③拣选合并:拣选另一条分支上的某个提交条目的改动带到当前分支上。
①直接合并:
>git checkout master
>git merge alternate
这样alternate分支上的修改就合并到主分支上了。
②压合合并
>git checkout master 切换到master分支上。
>git merge --squash contact
此时contact分支上的两个提交已经合并到当前工作区并暂存,但是还没有作为一个提交,提交到版本库中。
>git status
>git commit -m "add contact page" -m "has primary and secondary email"
③拣选合并:
>git checkout contact
然后在contact.html文件中添加一条新连接。
>git commit -m "add link to twitter" -a
>git checkout master
>git cherry-pick dee82a2 :dee82a2是刚才的提交名称
>git checkout master
>git merge alternate
这样alternate分支上的修改就合并到主分支上了。
②压合合并
>git checkout master 切换到master分支上。
>git merge --squash contact
此时contact分支上的两个提交已经合并到当前工作区并暂存,但是还没有作为一个提交,提交到版本库中。
>git status
>git commit -m "add contact page" -m "has primary and secondary email"
③拣选合并:
>git checkout contact
然后在contact.html文件中添加一条新连接。
>git commit -m "add link to twitter" -a
>git checkout master
>git cherry-pick dee82a2 :dee82a2是刚才的提交名称
>git cherry-pick -n dee82a2
>git status
>git commit
要拣选多个提交,
6)合并冲突处理:
冲突:Git不能自动合并时,称之为冲突。冲突总是发生在对不同分支上的同一文件的同一文本块以不同的方式修改,并试图合并的时候。
若发生冲突,打开冲突文件:
<<<<<<<<<<<<<HEAD:about.html
<li>JavaScript</li>
=====================
<li>EMCAScipt</li>
>>>>>>>>>>>>about2:about.html
</ul>
解析:
<<<<<<<<<<<<<后面跟随的是当前分支中的代码:
>>>>>>>>>>>>>后面跟随的是另一条分支中的代码:
==============上下是冲突的内容
HEAD指向当前分支末梢的那个提交。
7)有些分支没有必要长期保存,比如分支中的代码已经打了标签并已发布。
由于已经打了标签,Git删除该分支时,从版本树起始到此标签间的全部历史轨迹均会保留,这时删除分支操作只是删除分支本身的名称。因此可以说,该分支“没有必要长期保存”。
而在其他版本控制工具中,删除分支通常意味着删除分支上的所有历史轨迹。这时就不能说因为“分支中代码已经打了标签”,该分支就“没有必要长期保存”。
>git status
>git commit
要拣选多个提交,
6)合并冲突处理:
冲突:Git不能自动合并时,称之为冲突。冲突总是发生在对不同分支上的同一文件的同一文本块以不同的方式修改,并试图合并的时候。
若发生冲突,打开冲突文件:
<<<<<<<<<<<<<HEAD:about.html
<li>JavaScript</li>
=====================
<li>EMCAScipt</li>
>>>>>>>>>>>>about2:about.html
</ul>
解析:
<<<<<<<<<<<<<后面跟随的是当前分支中的代码:
>>>>>>>>>>>>>后面跟随的是另一条分支中的代码:
==============上下是冲突的内容
HEAD指向当前分支末梢的那个提交。
7)有些分支没有必要长期保存,比如分支中的代码已经打了标签并已发布。
由于已经打了标签,Git删除该分支时,从版本树起始到此标签间的全部历史轨迹均会保留,这时删除分支操作只是删除分支本身的名称。因此可以说,该分支“没有必要长期保存”。
而在其他版本控制工具中,删除分支通常意味着删除分支上的所有历史轨迹。这时就不能说因为“分支中代码已经打了标签”,该分支就“没有必要长期保存”。
8)对历史的记录和管理是版本管理系统的关键功能。在Git中,添加新文件或修改已有文件,都会以提交为单位记录下来,形成历史。
9)>git log
命令输出中,每个提交有四部分信息:提交名称、提交人、提交日期、提交留言。
>git log -p
加上-p选项后,Git就可以显示版本间的代码差异。
>git log -10
显示最近的10个提交。
>git log 7b1558c
也可以给git log命令传递一个指定的版本,并以此作为查看日志的起始点。上面例子中使用的是提交名称缩写,即40位提交名称的前7位字符。不论输入几位(至少4位),Git都会设法匹配。如果匹配不上或匹配到多个结果,Git就会报错。
通常4位或5位字符就足够匹配了,但7位或8位字符几乎保证了匹配的唯一性。
>git log --since="5 hours"
查看最近5小时内的提交。
>git log --before="5 hours" -1
查看5小时之前的最后一个提交。
>git log 18f822e..0bb3dfb
可以指定两个版本,“最老版本..最新版本”这种格式作为查找范围。(不包括起点,只包括终点)。
HEAD代表版本库里当前分支末梢的最新版本。
>git log 18f822e..HEAD
也可以不输入HEAD参数,因为Git假定“..”后面省略的值为HEAD:
>git log 18f822e..
当指定查找范围时,也可以用标签名称替换提交名称。这对于查看某一特定标签之后修改,以及查看两个标签之间的历史都是有用的。
>git log --pretty=format:"%h %s" 1.0..HEAD
>git log --pretty=oneline
^:一个脱字符作用相当于回溯一个版本。
*~N:波浪字符加数字的操作符是指回溯N个版本。
下面命令结果一样:
>git log -1 HEAD^^^
>git log -1 HEAD^~2
>git log -1 HEAD~1^^
>git log -1 HEAD~3
9)>git log
命令输出中,每个提交有四部分信息:提交名称、提交人、提交日期、提交留言。
>git log -p
加上-p选项后,Git就可以显示版本间的代码差异。
>git log -10
显示最近的10个提交。
>git log 7b1558c
也可以给git log命令传递一个指定的版本,并以此作为查看日志的起始点。上面例子中使用的是提交名称缩写,即40位提交名称的前7位字符。不论输入几位(至少4位),Git都会设法匹配。如果匹配不上或匹配到多个结果,Git就会报错。
通常4位或5位字符就足够匹配了,但7位或8位字符几乎保证了匹配的唯一性。
>git log --since="5 hours"
查看最近5小时内的提交。
>git log --before="5 hours" -1
查看5小时之前的最后一个提交。
>git log 18f822e..0bb3dfb
可以指定两个版本,“最老版本..最新版本”这种格式作为查找范围。(不包括起点,只包括终点)。
HEAD代表版本库里当前分支末梢的最新版本。
>git log 18f822e..HEAD
也可以不输入HEAD参数,因为Git假定“..”后面省略的值为HEAD:
>git log 18f822e..
当指定查找范围时,也可以用标签名称替换提交名称。这对于查看某一特定标签之后修改,以及查看两个标签之间的历史都是有用的。
>git log --pretty=format:"%h %s" 1.0..HEAD
>git log --pretty=oneline
^:一个脱字符作用相当于回溯一个版本。
*~N:波浪字符加数字的操作符是指回溯N个版本。
下面命令结果一样:
>git log -1 HEAD^^^
>git log -1 HEAD^~2
>git log -1 HEAD~1^^
>git log -1 HEAD~3
>git log HEAD~10..HEAD
10)查看版本之间的差异:
git diff查看工作拷贝和版本库中最新版本(HEAD)之间的差异。
>git diff 18f822e
上面命令显示的是18f822e这个版本和当前工作目录树间的差异。
>git diff --stat 1.0
可以统计新标签之后的代码量
>git blame hello.html
可以查看特定代码块的历史信息。该命令输出结果是代码块中每行代码前附加前缀信息,其中包括提交名称、提交人和提交时间。
>git blame -L 12,13 hello.html
显示hello.html的第12,13行日志。
>git blame -L 12,+2 hello.html
可以查看特定代码块的历史信息。该命令输出结果是代码块中每行代码前附加前缀信息,其中包括提交名称、提交人和提交时间。
>git blame -L 12,13 hello.html
显示hello.html的第12,13行日志。
>git blame -L 12,+2 hello.html
>git blame -L "/<\/body>/",+2 hello.html
使用正则表达式。
>git blame -L "/<\/body>/",-2 4333289e^ -- hello.html
>git blame -L "/<\/body>/",-2 4333289e^ -- index.html
查看文件hello在4333289e之前提交的日志。
使用正则表达式。
>git blame -L "/<\/body>/",-2 4333289e^ -- hello.html
>git blame -L "/<\/body>/",-2 4333289e^ -- index.html
查看文件hello在4333289e之前提交的日志。