diff 和 patch
diff和patch对 版本控制系统(差异存储 ) 和 使用版本控制系统(代码比较和冲突解决) 有很大的帮助。
diff 比较两个文本或目录的差异

首先构造了两个文本,一个文件hello ,一个文件为world,接着使用命令来对比两个文件的差异:
$diff - u hello world > diff.txt
diff 命令中,使用了 -u 能够将差异输出中带有上下文。经过对比后,得到的差异文件diff.txt中的内容有:
对于对比内容的格式说明:
第1行和第2行中记录的是 原始文件 和 目标文件的文件名与时间戳。
以三个减号(—)开始表示的是原始文件,以三个加号(+++)开始标识的是目标文件
在比较内容中:
以减号(-) 开始的的行只出现在原始文件的行,
以加号(+) 开始的行只出现在目标文件的行,
以空格 开始的行是在原始文件和目标文件中都出现的行。
每个差异小节以一行差异定位语句开始,其前后分别用 两个@ 进行标识 其中以 - 开始的为原始文件的起始行与到结束行标识行的小节行数,同样以 + 开始的为目标文件的开始行与结束行代表的标识总的小节行数。
patch 相当于diff的反向操作
有了hello和diff.txt文件,可以将world文件删除或着用hello文件将world文件覆盖,同时可以使用命令来进行还原world文件或者相反恢复hello文件:
$cp hello world
$patch world < diff.txt
//使用world来恢复hello文件
$cp world hello
$patch -R hello < diff.txt
Git工作流程
一般的工作流程如下:
1.克隆Git资源作为工作目录
2.在克隆的资源上添加或修改文件
3.如果有他人修改了,可以更新资源
4.再提交前查看修改
5,提交修改
6.在修改完成后,如果发现错误,可以撤回并再次修改提交
Git创建仓库
使用当前目录作为Git仓库
git init
使用指定目录作为Git仓库
git init newrepo
初始化后,在当前目录下会出现一个名为 .git 的目录,所有Git需要的数据和资源都存放在这个目录中
如果当前目录下有几个文件需要纳入版本控制,需要先用git add命令告诉Git开始对这些文件进行跟踪,然后提交
git add *.c
git add README
git commit -m 'initial project version'
从现有仓库克隆
克隆仓库的命令格式为:
git clone [url]
Git工作区、暂存区和版本库
工作区:在电脑中能够看到的目录
暂存区:英文叫stage或index,一般存放在.git目录下的index文件,所以把暂存区有时也叫索引(index)*
版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是Git的版本库
工作区、版本库和暂存区之间的关系
左侧为工作区,右侧为版本库,版本库中标记为”index“的区域是暂存区,标记为"master"的是master分支所代表的目录树。
"HEAD"是指向Master分支的一个游标
”objects“标识的区域为Git的对象库,里面包含了创建的各种对象及内容。
当对工作区修改(或新增)的文件执行"git add"命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
- 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master分支会做相应的更新,即master指向的目录树就是提交时暂存区的目录树。
- 当执行"git reset HEAD"命令时,暂存区的目录树会被重写,被master分支指向的目录树所替换,但是工作区不受影响。
- 当执行"git rm --cached"命令时,会直接从暂存区删除文件,工作区不会做出改变。
- 当执行 "git checkout ."或者"git checkout –"命令时,会用暂存区全部或指定的文件替换工作区的文件,这个操作很危险,会清楚工作区中未添加到暂存区的改动。
- 当执行"git checkout HEAD ." 或者 "git checkout HEAD "命令时,会用HEAD指向的master分支中全部或者部分文件替换暂存区和以及工作区中的文件,这个命令也是极具危险性的,因为不但会清楚工作区中未提交的改动,也会清除暂存区中未提交的改动。
Git基本操作
Git的工作就是创建和保存项目的快照与之后的快照进行对比
获取与创建项目命令
git init 在目录中创建新的Git仓库,可以在任何时候,任何目录中,完全是本地化的,在目录中执行git init 就可以创建一个Git仓库
git clone 用来进行拷贝一个Git仓库到本地,让自己能够查看该项目,或者进行修改,默认情况下,Git会按照所提供的URL所指示的项目的名称创建本地项目目录,通常就是该URL最后一个 /之后的项目名称,如果想要一个不同的名字,可以在命令后加上想要里的名称
基本快照
git add 命令可以将文件添加到缓存中
git status 命令可以查看项目的当前状态,查看在上次提交之后是否有修改
git commit 使用git add命令将想要的快照写入到了缓存,执行git commit能够记录缓存区的快照
git reset HEAD 用于取消缓存已缓存的内容
git rm 将文件从缓存区中删除
Git分支管理
创建分支的命令:
git branch (branchname)
切换分支的命令:
git checkout(branchname)
合并分支的命令:
git merge(branchname)
列出分支的命令:
git branch
删除分支的命令:
git branch -d(branchname)
Git查看提交历史
在使用Git提交若干更新后,又或者克隆某个项目,想回顾提交的历史,可以使用 git log来查看。
可以使用 git log --oneline来查看历史记录中的简洁版本。
Git标签
如果项目到达了一个·重要的阶段,希望记住这个特别的提交快照,可以使用git tag 来打标签
git tag -a v1.0
-a 选项为:创建一个带注解的标签,不用 -a选项也是可以执行的,但是不会记录这个标签是什么时候打的,谁打的,也不会添加标签的注解。
Git远程仓库
提取远程仓库
Git有两个命令来提取远程仓库的更新
1、从远程仓库下载新分支和数据
git fetch 该命令执行完成后需要执行 git merge 远程分支到所在的分支
2、从远端仓库提取数据并尝试合并当前分支
git pull 这个命令是执行git fetch 后执行 git merge的综合操作效果
推送到远程仓库
1、推送新的分支与数据到某个远端仓库的命令
git push [alias][branch]
将 branch分支推送到 alias远程仓库的branch分支上。
删除远程仓库
git remote rm [别名]
版权归原作者 GorgeousGu 所有, 如有侵权,请联系我们删除。