• Java面试基础 -- Git篇


    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 它列出了尚未合并的分支。

  • 相关阅读:
    Codeforces round 493 Convert to Ones
    石子合并系列问题【区间dp,环形,四边不等式优化】
    UVa 10635
    选课【树形dp】
    JSOI2016病毒感染
    加分二叉树【树形dp】
    人为什么活着__稻盛和夫的哲学
    213. House Robber II
    安装 error: Microsoft Visual C++ 14.0 is required 解决方案
    ImportError:no mudle named 'cv2'
  • 原文地址:https://www.cnblogs.com/yzh-blog/p/11669774.html
Copyright © 2020-2023  润新知