git版本控制工具的原理及常用指令

1.版本控制工具

跟踪源代码或其他文件的修改记录的工具
支持多人协作

原理:通过维护一系列快照实现;额外维护了作者及提交时间戳等元数据

1.1 底层数据模型

git将历史记录建模为某个顶层目录中的文件和文件夹的集合。

目录称为“tree”,文件称为“blob”

(1)使用有向无环图来模拟历史。
之所以使用图结构而非线性结构,是因为可以并行进行不同功能的开发工作,例如,有一个可以正常运行的基础版本,有人进行添加新功能的工作,有人进行修复bug的工作,这些最好可以并行进行,不互相打扰。最后再进行合并工作。
在这里插入图片描述

  1. 出现合并冲突如何解决(修复bug的工作影响到新特性或新特性的实现掩盖了之前的bug)?
    会报告合并冲突,需要用户自己决定

(2)git内部如何表示这个数据结构

Commit代表快照,合并提交有多个父节点,额外元数据,snapshot里面存放真正的内容
在这里插入图片描述
git维护了一个对象的哈希表objects。对象可以是blob、tree和commit(快照)。通过哈希表存储对象或检索对象。对象id通过哈希函数(例如SHA-1)生成。
哈希表负责实际对象的存储,在commit的数据结构中的元素,实际上都是指针形式,指向实际元素,因此代价不高。
在这里插入图片描述
(3)SHA-1生成的是40大小的16进制字符串,这些ID对人类来说不易查看。
使用哈希表映射一个人们便于理解的字符串。称为引用(refs)

1.2 常用命令

  1. git init ,初始化仓库,会创建.git目录,所有的仓库数据将存放在objects和refs两个目录下。
    默认会创建一个名为"master"的引用,代表代码中的主开发分支
    “HEAD”是git中的特殊引用,指向你当前正在查看的提交

  2. git status ,查看仓库状态

  3. git add filename;添加跟踪文件
    (1)git有一个称为staging area(暂存区)来保存下一次创建快照时应该保存的更改;新创建的文件一般是Untracked files(未跟踪),即在下次快照中不会保存此文件。
    (2)跟踪的文件修改后,也需要暂存

  4. git commit, 创建快照,会启动文本编辑器,编写提交消息
    并且会输出结点的哈希值,例如a15cebf

  5. git cat-file -p 哈希值,可以查看该哈希值对应对象

  6. git log,可以查看版本历史记录(以线性形式)
    git log --all --graph --decorate;以图的形式显示
    git log --all --graph --decorate --oneline;信息更精简

  7. git checkout 哈希值;改变当前工作目录的状态到指定的那个提交
    git checkout 其他引用(例如master);实际上是移动了HEAD指针,并根据该指针改变了当前工作目录的内容

  8. git diff filename;显示自HEAD指向的快照以来发生了哪些改变
    git diff 哈希值 filename;显示自指定快照以来发生的改变
    git diff 哈希值 哈希值 filename;显示两个指定快照之间发生的改变

  9. git branch;列出本地所有分支;访问分支作用
    git branch 新分支名;创建一个新的分支,新分支名目前只是一个指向当前位置的引用
    需要注意的是:若像向上面一样的结点图,进行并行开发,需要在master处创建两个分支,分别修改后,master对这些分支逐一合并。

  10. 分支切换
    git checkout 分支名;切换到其他分支
    git checkout -b 新分支名;创建并切换到新分支

  11. git merge;分支合并
    出现分支冲突,需要手动调整,注意修改文件后需要重新添加到暂存区
    git merge --continue;解决分支冲突后继续执行

1.3 远程仓库

  1. git remote;列出当前仓库所知道的所有远程仓库
    git remote add < name> < url>;添加远程仓库,如果只使用一个仓库,使用名称为origin

  2. git push < remote> < local branch >:< remote branch >;在远程仓库创建一个新分支或更新上面的分支,改为本地指定分支的内容

  3. git fetch;获取仓库最新更改,不会更改本地历史记录及本地引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java面试题git是关于版本控制和代码管理工具git在java开发中的应用和相关知识的问题。下面我将用300字回答这个问题。 1. git是什么?git是一个分布式版本控制系统,可以高效地管理和追踪代码的改动。它与集中式版本控制系统相比具有更高的性能和灵活性。 2. git的基本工作原理是什么?git使用了一种称为“快照”的方式来记录代码的更改。每次提交代码时,git会创建一个新的快照,并将其与上一次提交进行比较,以记录代码的改动。这样可以高效地保存和追踪代码的修改历史。 3. git常用命令有哪些?git常用命令包括:git init(初始化git仓库),git add(将文件添加到暂存区),git commit(提交代码),git push(将提交的代码推送到远程仓库),git pull(从远程仓库拉取最新代码),git branch(创建、查看或删除分支),git merge(合并分支),git rebase(变基操作)等。 4. 如何解决代码冲突?在团队协作开发中,多人对同一个文件进行修改会产生代码冲突。解决代码冲突可以使用git的合并(merge)或变基(rebase)命令来进行操作。首先,需要查看代码冲突的文件,然后手动解决冲突并保存修改。最后,再次提交修改以解决代码冲突。 5. 如何撤销git提交?如果需要撤销最近一次的git提交,可以使用git的reset命令。git reset HEAD^可以撤销最近的一次提交,并将修改保留在工作区。如果希望彻底删除最近一次提交的更改,可以用git reset --hard HEAD^命令。 总结,git是一种强大的版本控制和代码管理工具,广泛应用于Java开发中。掌握git的基本命令和工作原理,对于团队协作开发和代码管理是非常重要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值