1.Git和SVN有什么区别?
Git SVN
Git是一个分布式的版本控制工具 SVN 是集中版本控制工具
它属于第3代版本控制工具 它属于第2代版本控制工具
客户端可以在其本地系统上克隆整个存储库 版本历史记录存储在服务器端存储库中
即使离线也可以提交 只允许在线提交
push/pull 操作更快 Push/pull 操作较慢
工程可以用 commit 自动共享 没有任何东西自动共享

2.什么是Git?

Git 是分布式版本控制系统,可以跟踪文件的更改,并允许你恢复到任何特定版本的更改,优点是它不依赖于中央服务器来存储项目文件的所有版本。每个开发人员都可以“克隆”“Local repository”标注的存储库的副本,并且在他的硬盘驱动器上具有项目的完整历史记录,因此当服务器中断时,你需要的所有恢复数据都在你队友的本地 Git 存储库中。还有一个中央云存储库,开发人员可以向其提交更改,并与其他团队成员进行共享。


3.Git的一些常见命令。
创建存储库: git init
更改git配置: git config
关联用户名: git config --global user.name "名字"
关联email: git config --global user.email "邮件"
提交命令: git commit -m "注释"
检查当前文件状态: git status
提出更改(把它们添加到暂存区): git add filename (针对特定文件)、git add *(所有文件)、git add *.txt(支持通配符,所有 .txt 文件)
移除文件: git rm filename (从暂存区域移除,然后提交)
对文件重命名: git mv README.md README
跳过使用暂存区域更新的方式: git commit -a -m "注释" -a:跳过git add 步骤,自动把所有已经跟踪过的文件暂存起来一并提交
推送代码到远程仓库: git push origin master
取消暂存的文件: git reset filename
撤销对文件的修改: git checkout -- filename
git reset --hard origin/master
尝试重新提交: git commit --amend
丢弃本地修改,拉取最新代码,并本地主分支指向它: git fetch origin git reset --hard origin/master
创建新分支: git branch test
切换新分支: git checkout test
合并分支(可能会有冲突): git merge test
删除分支: git branch -d test

4.如何撤销已经推送(push)至远端仓库的提交(commit)信息?

撤销提交信息:

  • 首先,通过git log查看提交信息,以便获取需要回退至的版本号;
  • 然后,通过git reset --soft <版本号>重置至指定版本的提交,达到撤销提交的目的;
  • 然后,通过git log确认是否成功撤销;

    参数soft:保留当前工作区,以便重新提交

    参数hard:会撤销相应工作区的修改

撤销:

  • 通过git push origin master –force强制提交当前版本号,以达到撤销版本号的目的;必须添加参数force进行强制提交,否则会提交失败,并报错

    报错原因:本地项目版本号低于远端仓库版本号。

修改代码,重新提交和推送:

  • git add .
  • git commit -m "注释"
  • git push origin master

5.git pull 和 git fetch 有什么区别?
  • git pull:从中央存储库中提取特定分支的新更改或提交,并更新本地存储库中的目标分支。
  • git fetch:一样的目的,但工作方式略有不同。当你执行 git fetch 时,它会从所需的分支中提取所有新提交,并将其存储在本地存储库中的新分支中。如果要在目标分支中反映这些更改,

    必须在 git fetch 之后执行git merge。只有在对目标分支和获取的分支进行合并后才会更新目标分支。

总结:git pull = git fetch + git merge


6.什么是git stash ? 什么是git stash drop?
  • git stash:当你一直在处理项目的某一部分时,如果你想要在某个时候切换分支去处理其他事情,事情会处于混乱的状态。git stash 会将你的工作目录,即修改后的跟踪文件和暂存的更改保存在一堆未完成的更改中,你可以随时重新应用这些更改。
  • git stash drop:用于删除隐藏的项目。默认情况下,它将删除最后添加的存储项,如果提供参数的话,它还可以删除特定项。

    例如:

    git stash list 显示所有的隐藏项目表;

    git stash drop stash@{0} 删除第一个项目;

7.如何找到特定提交中已更改的文件列表?

获取特定提交中已更改的列表文件:

git diff-tree -r {hash}

给定提交哈希,这将列出在该提交中更改或添加的所有文件。 -r 标志使命令列出单个文件,而不是仅将它们折叠到根目录名称中。

git diff-tree –no-commit-id –name-only -r {hash}

-no-commit-id:将禁止提交哈希值出现在输出中

-name-only:只会打印文件名而不是它们的路径


8.Commit的对象包含什么?
  • 一组文件,表示给定时间点的项目状态
  • 引用父提交对象
  • SHAI 名称,一个40个字符的字符串,提交对象的唯一标识

9.怎样将 N 次提交压缩成一次提交?

两种方式:

  • 如果要从头开始编写新的提交消息,请使用以下命令:
git reset --soft HEAD~N && git commit
  • 如果你想在新的提交消息中串联现有的提交消息,那么需要提取这些消息并将它们传给 git commit,可以这样:
git reset –soft HEAD~N &&
git commit –edit -m"$(git log –format=%B –reverse .HEAD@{N})"

10.描述一下你所使用的分支策略?
  • 功能分支(Feature branching):

    要素分支模型将特定要素的所有更改保留在分支内。当通过自动化测试对功能进行全面测试和验证时,该分支将合并到主服务器中。
  • 任务分支(Task branching):

    在此模型中,每个任务都在其自己的分支上实现,任务键包含在分支名称中。很容易看出哪个代码实现了哪个任务,只需在分支名称中查找任务键。
  • 发布分支(Release branching):

    一旦开发分支获得了足够的发布功能,你就可以克隆该分支来形成发布分支。创建该分支将会启动下一个发布周期,所以在此之后不能再添加任何新功能,只有错误修复,文档生成和其他面向发布的任务应该包含在此分支中。一旦准备好发布,该版本将合并到主服务器并标记版本号。此外,它还应该再将自发布以来已经取得的进展合并回开发分支。

最后告诉他们分支策略因团队而异,所以我知道基本的分支操作,如删除、合并、检查分支等。


11.如果分支是否已合并为master,你可以通过什么手段知道?
  • git branch –merged 它列出了已合并到当前分支的分支。
  • git branch –no-merged 它列出了尚未合并的分支。

Java面试基础 -- Git篇的更多相关文章

  1. Java面试基础 -- Linux篇

    0.日常命令 cd 目录路径: 跳转到指定目录 mkdir 目录名称:新增目录 pwd: 获取当前路径 su: 切换用户 ll: 查看当前目录侠的文件和目录 rm -rf 目录: 递归删除指定目录下的 ...

  2. Java面试基础 -- Docker篇

    1.什么是Docker? Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行. 2.什么是Docker镜像? Docker镜像是 ...

  3. 【JAVA秒会技术之秒杀面试官】秒杀Java面试官——集合篇(一)

    [JAVA秒会技术之秒杀面试官]秒杀Java面试官——集合篇(一) [JAVA秒会技术之秒杀面试官]JavaEE常见面试题(三) http://blog.csdn.net/qq296398300/ar ...

  4. JAVA面试基础

    JAVA相关基础知识1.面向对象的特征有哪些方面 ?1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂 ...

  5. java面试基础篇(一)

    最近想深入的理解一下java 的工作机制,也是便于后期的面试. 1.A:HashMap和Hashtable有什么区别? Q:HashMap和Hashtable都实现了Map接口,因此很多特性非常相似. ...

  6. java面试基础篇(三)

    1.Q:ArrayList 和 LinkedList 有什么区别? A:ArrayList查询快!LinkedList增删快.ArrayList是基于索引的数据接口,它的底层是数组.空间占用相对小一些 ...

  7. java面试基础篇(二)

    上一篇,我们说了一下线程和Map,或许那些太抽象,不太好理解,也不太方便记忆,我们这次说一些简单的. 1.Q:java的基本数据类型有哪些? A:四种整数类型(byte.short.int.long) ...

  8. java面试基础篇-List

    一.ArrayList: 底层为数组实现,线程不安全,查询,修改快,增加删除慢, 数据结构:数组以0为下标依次连续进行存储 数组查询元素:根据下标查询就行 数组增加元素:如果需要给index为10的位 ...

  9. Java面试基础部分合集

    写在前面:这篇文章对于在Java方面已经很牛逼的大手,就没必要看了,因为对于你们来说,这tm简直太简单了.... 面试我们都经历过,你真的懂面试吗?针对面试我只想说一点,面试的目的不是让考官知道你怎么 ...

随机推荐

  1. 北京国际机场T3行李运维平台开发记录

    说明 该项目是一个后台管理型网站项目,供北京国际机场T3航站楼行李调度运维部门使用,开发时间一个半月,我负责所有的前端开发.后端开发.API接口文档设计与编写.服务部署和交付. 整个网站具备的功能有: ...

  2. 直击KubeCon北美峰会:开发者们不得不关注的10大项目

    今天晚上8:30,第三期在线培训<如何通过Istio进行金丝雀发布>将准时开播,内容包括Istio原理.金丝雀发布.在Rancher中启用Istio,报名及观看链接:https://www ...

  3. Aery的UE4 C++游戏开发之旅(3)蓝图

    目录 蓝图 蓝图命名规范 蓝图优化 暴露C++至蓝图 暴露C++类 暴露C++属性 暴露C++函数 暴露C++结构体/枚举 暴露C++接口 蓝图和C++的结合方案 使用继承重写蓝图 使用组合重写蓝图 ...

  4. git 版本检出checkout的方法笔记

    想检出指定版本,比如回退版本,将代码检出到老代码 git checkout 版本号 git reflog git checkout  标签名 1.git log 查看版本信息,复制版本号,执行git ...

  5. springcloud Config 入门,带视频

    疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长+面试必备之 高并发基础书籍 [Netty Zookeeper Redis 高并发实战 ] 前言 Crazy ...

  6. 流式计算(二)-Kafka Stream

    前面说了Java8的流,这里还说流处理,既然是流,比如水流车流,肯定得有流的源头,源可以有多种,可以自建,也可以从应用端获取,今天就拿非常经典的Kafka做源头来说事,比如要来一套应用日志实时分析框架 ...

  7. spring单元测试下模拟rabbitmq

    gradle添加引用 compile 'org.springframework.boot:spring-boot-starter-amqp' testCompile 'com.github.fridu ...

  8. 运用arcgis sever 进行地图发布

    1.对已有的文件在arcgis中进行编辑:如图 2.从file下拉的目录中找到share as 点击 3.选择自己的manage sever 填写好名称 4.继续下一步 5.重点看capabiliti ...

  9. Linux搭建图片服务器减轻传统服务器的压力(nginx+vsftpd)

    传统项目中的图片管理 传统项目中,可以在web项目中添加一个文件夹,来存放上传的图片.例如在工程的根目录WebRoot下创建一个images文件夹.把图片存放在此文件夹中就可以直接使用在工程中引用. ...

  10. mysqld_safe error: log-error set to '/data/log/mysqld.log', however file don't exists. Create writable for user 'mysql'.The server quit without updating PID file (/data/mysql/mysqld.pid)

    [oot@cent65 bin]# service mysqld startStarting MySQL.2019-10-28T15:56:47.786960Z mysqld_safe error: ...