0


让 Git 在项目中发挥最大的力量

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 [别名]
标签: git 开发语言

本文转载自: https://blog.csdn.net/weixin_42195836/article/details/140325222
版权归原作者 GorgeousGu 所有, 如有侵权,请联系我们删除。

“让 Git 在项目中发挥最大的力量”的评论:

还没有评论