详解Git代码版本控制和常见面试问题
详解Git代码版本控制和常见面试问题
基本原理
控制命令
Git配置
git config --global user.name "用户名"
git config --global user.email "邮箱地址"
Git首次提交代码操作
git init//在本地初始化git仓库(注意小写的问题,如写成“git Init”,会产生错误信息 fatal:cannot handle Init as a builtin)
git remote add origin (gitee、github地址) //给本地仓库绑定远程仓库
git pull origin master
git add .//添加内容至暂存区
git commit -m"注释内容" //提交到本地仓库
git push origin master//推送代码至远程仓库
git push origin master --force//必要情况下可以使用强制推送
Git后续提交代码操作
git pull origin master
git add .
git commit -m"注释内容"
git push origin master
git push origin master --force
其余补充操作
1、git log //查看提交的历史
2、git status //用于显示工作目录和暂存区的状态
3、git fetch//安全版的pull
4、git brach //查看分支
5、git merge 分支名//合并分支到当前分支
6、git checkout 分支名//切换分支
常见面试问题
什么是git?它的特点是什么?
答:
git是一种分布式版本控制系统,用于追踪和管理文件的变化。它具有以下主要特点:
- 分布式:每个开发者都有完整的代码仓库副本,可以在本地进行工作,无需依赖中央服务器。
- 强大的分支支持:Git以分支为核心,轻松创建、合并和管理分支,方便并行开发和特性隔离。
- 快速和高效:Git通过对文件和内容进行快速哈希计算来实现高效的版本控制。
- 完整性和安全性:Git使用SHA-1哈希来确保数据的完整性,并提供认证和加密功能以确保安全性。
为什么要使用git?
答:
为了保留之前所有的版本,方便回滚和修改。
和SVN的区别?
答:
集中化版本控制系统例如SVN,客户端连接到中央服务器取出最新的文件或者提交更新。所以有个很明显的缺点就是如果中央服务器发生故障,故障期间谁都无法提交更新。
分布式版本控制系统例如Git,客户端不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这样即使中央仓库发生故障,我们可以先提交到本地仓库。等故障恢复后再提交到中央仓库。
git的工作原理是什么?
答:
Git基于快照(snapshot)而非差异(diff)的方式来处理文件变化。
它将文件和目录的快照保存在一个称为“仓库(repository)”的数据库中。当提交(commit)时,Git会创建一个指向该快照的指针,并将该指针添加到版本历史中。
Git使用分支(branch)来指向不同的提交,从而支持并行开发和特性隔离。
列举常用的git命令
答:
//初始化命令
git init
//新增文件
git add filename 或者git add .
//提交文件,生成版本
git commit -m
//查看工作区状况
git status
//详细当前分支详细的提交历史记录
git log --graph --pretty=format:"%h %s"记录简洁图形展示
//查看所有分支简化的提交历史记录(回滚当前版本之后的版本)
git reflog
//版本号 回滚版本
git reset --hard
常见的分支命令
//查看分支
git branch
//创建分支
git branch 分支名称
//切换分支
git checkout 分支名称
//创建并切换分支
git checkout -b 分支名称
//合并分支(可能产生冲突)
git merge 要合并的分支名称 (注意要先切换分支再合并)
//删除分支
git branch -d 分支名称
远程仓库命令
//添加远程连接(别名)
git remote add origin 地址
//推送代码
git push origin dev
//克隆远程仓库到本地
git clone 地址
//拉取代码
git pull origin dev
等价于git fetch origin dev + git merge origin/dev
// 修改远程仓库的地址
#直接修改配置里面的url即可
vim .git/config
git pull和git fetch的区别
答:
git fetch只是将远程仓库的最新的版本下载到本地,但是不会自动merge,相当于工作区中的文件并没有更新
git pull会从远程仓库获取到最新的版本并merge到本地。
git pull origin dev=git fetch origin dev+git merge origin/dev;
git fetch更保险一些,git pull操作更简单
git merge和git rebase的区别
答:
git merge 操作合并分支会让两个分支的共同提交点之后每一次提交都按照提交时间(并不是push时间)排序,并且会将两个分支的最新一次commit点进行合并成一个新的commit,最终的分支树呈现非整条线性直线的形式
git rebase操作实际上是将当前执行rebase分支的所有基于原分支提交点之后的commit打散成一个一个的patch,并重新生成一个新的commit hash值,再次基于原分支目前最新的commit点上进行提交,并不根据两个分支上实际的每次提交的时间点排序,rebase完成后,切到基分支进行合并另一个分支时也不会生成一个新的commit点,可以保持整个分支树的完美线性。
如何撤销已提交的代码更改?
可以使用git revert命令来撤销已提交的代码更改。该命令将创建一个新的提交,用于撤销指定提交引入的更改,同时保持版本历史的完整性。另一种方法是使用git reset命令,该命令允许将分支指针移动到先前的提交,但需要谨慎使用,因为它会改变版本历史。
如何解决合并冲突?
合并冲突发生在合并分支时,当两个分支的同一部分产生了不同的更改时。解决合并冲突的一般步骤如下:
- 使用git status命令查看冲突的文件。
- 打开冲突文件,手动解决冲突并选择要保留的更改。
- 使用git add命令将解决冲突后的文件标记为已解决。
- 使用git commit命令提交解决冲突的结果。
如何查看提交日志?
可以使用git log命令查看提交日志。
该命令以时间倒序列出所有提交,并显示每个提交的作者、日期、提交消息和哈希值等信息。可以通过添加不同的选项来自定义日志的输出格式和范围。
如何创建和合并分支?
可以使用git branch命令创建新分支。
例如git branch feature。创建分支后,可以使用git checkout命令切换到新分支,例如git checkout feature。要将分支合并到当前分支,可以使用git merge命令,例如git merge feature。
如何查看文件的修改历史?
可以使用git blame命令查看文件的修改历史。
该命令会逐行显示文件的内容,并标记每行的修改作者和提交信息。通过git blame,可以了解每行代码的修改来源和相关上下文。
如何将本地仓库与远程仓库同步?
可以使用git fetch命令从远程仓库下载最新的提交和分支信息。
然后,使用git merge命令或git rebase命令将本地分支与远程分支合并。
最后,使用git push命令将本地提交推送到远程仓库。
如何撤销暂存的文件?
可以使用git restore命令来撤销暂存的文件。
该命令将取消对文件的暂存,并还原文件到最后一次提交的状态。
如果要完全丢弃对文件的更改,可以使用git restore --staged
如何在Git中标记重要的提交?
可以使用git tag命令来标记重要的提交。
标签可以用于版本发布、里程碑标记等。
可以创建两种类型的标签:轻量标签(仅包含提交哈希)和带注释的标签(包含提交哈希、作者、日期和注释)。
例如,使用git tag v1.0创建一个轻量标签,使用git tag -a v1.0 -m "Version 1.0"创建一个带注释的标签。
参考资料:
https://blog.csdn.net/weixin_53509920/article/details/120359395
https://mbd.baidu.com/newspage/data/dtlandingsuper?nid=dt_4904398288277770433
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现