您的位置:首页 > 其它

使用git 本地文件(3)----连载

2013-08-27 08:48 239 查看

1、添加文件到暂存区

检查历史记录可以提供非常宝贵的信息。例如面对问题“这个文件怎么不符合编码规范?”时,快速检查文件的历史,可能发现只显示一条“为客户演示准备的”提交,在此之后没有被修改过。


如果想查看更加详细的信息,git能够显示谁在何时修改了哪行代码,它还可以进一步显示该文件两个版本之间的差异。


最后,git允许你修改版本库中的历史记录。但是一般不会用到。



a、先往git目录mysite中加入文件index.html:

<html>
<body>
	<h1>hello world</h1>
	<ul>
		<li><a href="bi.html">biography</a></li>
	</ul>
</body>
</html>




对其进行3次

第一次(加入head和title标签):



第二次(加入meta标签):

<html>
<head>
	<title>my html</title>
	<meta name="description" content="hello world in Git" />
</head>
<body>
	<h1>hello world</h1>
	<ul>
		<li><a href="bi.html">biography</a></li>
	</ul>
</body>
</html>




第三次(修改链接):

<html>
<head>
	<title>my html</title>
	<meta name="description" content="hello world in Git" />
</head>
<body>
	<h1>hello world</h1>
	<ul>
		<li><a href="about.html">about</a></li>
	</ul>
</body>
</html>




b、查看git日志

使用git log:



这个命令后面有一个参数-value,可以设置显示的信息数目

时隔半年之后再查看以前的提交留言,可能并不哇暖理解当时的意图。在日志信息外,常常要借助查看代码修改本版,才能逐渐回忆起当时的情景。

在git log命令后添加-p选项,git就可以显示版本间的代码差异。



q键退出 查看

当然这是默认查看最后一次的修改的,查看某一次修改可以这样

先用git log得到版本号(我们只使用前面的7位就能标识):



比如我要查看第二个版本(版本号的标识在commit 后面)的差异



2、指定查看范围

比如查看5个小时以来的修改:



10分钟:



指定两个版本,用“最老版本..最新版本”这种格式作为查找范围:

首先获取版本号



使用命令



3、查看版本之间的差异

使用git diff,可以查看工作拷贝和版本库中最新版本之间的差异。

暂时先来修改文件:

<html>
<head>
	<title>my html</title>
	<meta name="description" content="hello world in Git" />
</head>
<body>
	<h1>hello git</h1>
	<ul>
		<li><a href="about.html">about</a></li>
	</ul>
</body>
</html>


用git diff:



同样的,也可以指定一个版本:



在命令git diff里,指定版本范围的方法与git log一样。唯一的区别是git diff输出的是最老版本与最新版本之间的差异,而不是按提交条目一个个地显示。

在使用git diff的时候,还可以使用标签作为参数(如果没有创建标签,则不用填,默认为HEAD):



这样就能获取发布版本之间代码量统计信息了

4、得到谁做的修改



5、跟踪内容

在C语言里,有的代码行只有一个大括号,这样的代码行,彼此之间容易误配。为了尽量避免误配,git至少要匹配3行才认为是复制和粘贴的结果。

在git目录下创建一个ReadMe.txt文件:

And the days feel like years

when I'm alone

And the bed where you lie

Is made up on your side

保存、添加并提交到版本库中:



现在修改这个文件,把数据变成:

And the days feel like years

when I'm alone

And the bed where you lie

Is made up on your side

And the days feel like years

when I'm alone

And the bed where you lie

Is made up on your side

然后保存,指定git diff:



提交修改到版本库中



现在可以利用git blame查看文件中每一行的历史记录:



红色标注的位置是提交名称缩写。这对应于到目前位置的两次提交

在后面加入一个参数-M。告诉git blame检测在同一个文件内移动或复制的代码行:



结果显示所有的提交名称都相同。因为git跟踪的是内容,它在这里检测到了重复的内容

git blame还可以检测到文件的重命名和复制(这里举一个重命名,把ReadMe.txt改成ReadMe2.txt):









还可以传递参数-p,除了显示常规日志信息之外,还会显示代码的具体变动:



6、撤销修改

在git中,所以的修改都是在本地进行的,只有推入到公共版本库才能共享。既然本地库是自己的地盘,那么可以随意改写版本库中的历史记录,而不会影响到别人。

因为上面的太乱了,为了演示,重新创建一个git版本库:

先往git目录mysite中加入文件index.html:
<html>
<body>
	<h1>hello world</h1>
	<ul>
		<li><a href="bi.html">biography</a></li>
	</ul>
</body>
</html>




对他进行3次修改

先变成

<html>
<head>
	<title>my html</title>
</head>
<body>
	<h1>hello world</h1>
	<ul>
		<li><a href="bi.html">biography</a></li>
	</ul>
</body>
</html>



再变成

<html>
<head>
	<title>my html</title>
	<meta name="description" content="hello world in Git" />
</head>
<body>
	<h1>hello world</h1>
	<ul>
		<li><a href="bi.html">biography</a></li>
	</ul>
</body>
</html>



最后变成

<html>
<head>
	<title>my html</title>
	<meta name="description" content="hello world in Git" />
</head>
<body>
	<h1>hello world</h1>
	<ul>
		<li><a href="about.html">about</a></li>
	</ul>
</body>
</html>




这是所做的所有修改



假如现在我发现,我最后一步所做的,修改link的步骤弄错了,我要退回到“add meta tag”这个版本,那么我需要使用git reset命令:



默认reset是通过--soft参数使用的。它使得git暂存所有的因复位带来的差异,但不提交它。之后,用户可以修改这些内容再提交,或者干脆扔掉这些内容。因为上面已经reset,所以用diff可以发现:



但是如果要使用参数--hard(要小心使用!),该选项会从版本库和工作目录树同时删除提交。--hard就好像版本库中的delete键,是会把代码直接恢复成上一个版本的,并且不可以恢复。现在的修改是:



要把工作目录和版本库复位(修改代码)到add head and title tag那个时候的,只需要:



我的UE会提示:



代码变回:



如果你只需要在本地使用git保存你的代码,那么只看到这里,就足够了。

如果你需要在远程(或者局域网)使用git,和同事或者回家自己继续修改代码,那么还需要往下看。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: