Git对象类型和基本操作的理解

版权声明:版权所有,转载需通知本人 https://blog.csdn.net/ting0922/article/details/82967831

Git对象类型和基本操作的理解

Git对象类型

Git有四种基本的对象类型,包括:

  1. blobs: 每个blob代表一个版本文件,blob只包含文件的数据,而忽略文件的其他元数据,如:名字、路径、格式等。
  2. trees:每个tree代表了一个目录的信息,包含了此目录下的blobs,子目录(对应于子trees),文件名、路径等元数据。因此,对于有子目录的目录,git相当于存储了嵌套的trees。
  3. commits:每个commit记录了提交一个更新的所有元数据,如:指向的tree、父commit、作者、提交者、提交日期、提交日志等。每次提交都指向一个tree对象,记录了当时提交的目录信息,一个commit可以有多个(至少一个)父commit。
  4. tags: tag用于给某个上述类型的对象指配一个便于开发者记忆的名字,通常用于某次commit。
    在这里插入图片描述

Git工作流程

  • 在工作目录中修改某些文件。
  • 对修改后的文件进行快照,然后保存到暂存区域
  • 提交更新,将保存在暂存区域的文件快照永久存储到Git目录中。

Git基本操作

  • git clone
    拷贝完整的Git仓库,.git文件夹下包含所有Git需要的数据和资源。(服务器上有的数据克隆之后本地也都有了。这样的话,即使服务器的磁盘发生故障,用任何一个克隆出来的客户端都可以重建服务器上的仓库,回到当初克隆的状态)
  • git init
    在某个项目所在目录中执行git init,可以实现对这个项目的Git管理。
  • vim index.html
    创建和编辑一个新文件index.html,保存退出后运行git status 会看到该文件出现在未跟踪的文件列表中。
  • git status
    确定文件当前所处状态(刚克隆就执行,nothing to commit,这时工作目录没有任何文件)
  • git add index.html
    跟踪一个文件index.html,运行git status,会看到该文件已经被跟踪,并处于暂存状态。
  • git commit –m “提交说明”
    在文件都已经暂存起来的情况下,可以提交更新。
    提交后的信息,说明当前是在master分支提交的,还有本次提交的SHA-1校验和,一级本次提交中,有多少文件修订过,多少行添加和删改过。
    Git是使用SHA-1算法计算数据的校验和,通过对文件的内容或目录的结构计算一个SHA-1哈希值,它是一个40位的字串(十六进制)
  • git log
    会按提交时间列出所有的更新,最近的更新排在最上面。列出了每次更新的一个SHA-1校验和、作者名字和电子邮件地址、提交时间、提交说明。
  • git push <远程主机名> <本地分支名>:<远程主机分支名>
  • git push orgin master
    把本地的master分支推动到origin服务器上(因为克隆操作会自动使用默认的master和origin名字)
  • vim index.html
  • git diff
    查看没有暂存的文件更新了那些部分,不加参数直接输入git diff
    —代表源文件
    +++代表目标文件
    通常工作目录中的文件被当做目标文件来看待。
    -开头的行是只出现在源文件中的行
    +开头的行是只出现在目标文件中的行
    空格开头的行,是源文件与目标文件都出现的行
  • git diff –cached
    查看已经暂存起来的文件和上次提交的快照之间的差异
  • git reset HEAD
    取消暂存
  • git checkout –
    打开文件进行修改,然后取消修改
    vim index.html
    git add .
  • git rm
    从工作目录中删除文件
  • git rm –cached
    仅从跟踪清单中删除,而保留在当前工作目录
  • git rm –f
    强制删除某文件
    远程仓库:要参与任何一个Git项目的协作,必须了解远程仓库的概念。远程仓库就是指托管在网络上的项目仓库,这些仓库是有读写权限的,有些你只能读,有些可以写。和别人协作开发某个项目时,需要管理这些远程仓库,以便推送和拉取数据,分享各自的工作进展。
  • git remote
    查看当前配置有哪些远程仓库,会列出每个远程库的简短名字(克隆完某个项目之后,至少可以看到一个名为origin的远程库,git默认使用这个名字来标识你所克隆的原始仓库)
  • git remote –v
    显示远程仓库对应的克隆地址
  • git fetch
    抓取远程仓库上有的,但本地仓库没有的信息

Git分支

分支就是你可以在开发主线上分离开来,然后在不影响主线的同时继续工作。在很多版本控制系统中,这是一个非常昂贵的过程,因为他们需要创建一个源代码目录的完整副本,对于大型项目来说这会发费很长时间。
Git的分支非常轻量级,它的新建操作可以在瞬间完成,并且在不同分支之间的转换也特别快。Git鼓励在工作流程中频繁使用分支和合并。
Git分支的第一张ppt:在Git中提交时,会保存一个提交(commit)对象,这个对象包含一个指向暂存内容快照的指针,包含本次提交的作者、提交者等信息。工作目录中有三个文件,准备将他们暂存后提交,暂存操作会对每个文件计算校验和(SHA-1字串)。
这次的提交对象会包含上次提交对象的指针。

  • git branch testing
    新建一个testing分支
    Git 需要知道你当前在哪个分支上工作,所有它保存一个名为HEAD的指针,HEAD指向当前你正在工作中的本地分支。
  • git checkout testing
    将HEAD切换到testing分支
    vim index.html修改之后提交,展示ppt(此时master和testing的位置)
    转到master分支,修改index.html, git add ,git commit
  • git merge testing
    将testing中修改的内容合并到master分支
    发生冲突是因为,在master和testing的分支里都修改了同一个文件的同一部分。Git就没法自动合并,这时需要自己删改。
    ======隔开的上半部分是HEAD指向的分支中的内容,下半部分是在testing分支中的内容。解决冲突的办法是二选一或者亲自整合到一起。
  • git branch
    后面不加参数,会给出当前所有分支的清单(*表示HEAD当前指向的分支)
  • git branch –d
    删除分支

猜你喜欢

转载自blog.csdn.net/ting0922/article/details/82967831