zoukankan      html  css  js  c++  java
  • 15.Git面试题

    1.git常见命令作用

    git init
    	在哪一目录下,就会在该目录下生成.git目录.
    	注意:git init命令会把当前目录当作库。
    git status
    	查看本地库的状态
    git add .
    	将所有发生改变的文件添加到暂存区
    	这里的"."可以被替换成具体文件名,以表示只添加该文件
    git commit -m 'git_initCommit'
    	将暂存区的文件实际保存到仓库的历史纪录,通过这些历史记录,我们就可以在工作树中复原文件.
    	-m后的是提交信息,是对这个提交的概述;如果不加-m'',会启用vim编辑录入提交信息.
    	提交信息非常关键,当你查看你的工作树时,需要通过提交信息来判断这次commit具体做了哪些改变.
    git log
    	查看提交日志
    git branch
    	将分支名列表显示,并确定当前所在分支
    	左侧标有*的表示这是我们当前所在的分支
    git diff
    	查看工作树与暂存区的差别
    	没有执行"add ."即没有添加暂存区的话,暂存区为空,显示的是工作树与最新提交状态之间的差别
    git diff HEAD
    	查看工作树与最新提交的区别
    git checkout -b feature-A
    	创建切换分支
    git branch feature-A
    	创建分支,这里的feature-A是我的分支名
    git checkout feature-A
    	将当前分支切换到该分支
    git checkout -
    	切换回上一个分支
    	培育分支:不断对一个分支进行提交的操作
    	创建分支的作用:可以在互不影响的情况下进行多个功能的开发
    git merge --no-ff feature-A
    	合并分支,这里的feature-A是我的分支名
        具体看:--no-ff
        这个指令会进入vim编辑器,需要输入此次合并的信息,同样会出现在历史记录中.
        vim操作:使用ZZ保存退出,ZQ不保存退出
    git reset --hard
    	回溯历史版本
    git commit -am ""
    	先暂时理解为add操作与commit操作的合并,但他远不止这样.
    	在windows环境下这个指令的提交信息要使用""包含.
    git rebase -i HEAD~2
        压缩历史,就是说将多个历史纪录压缩为一条历史纪录.
        这里历史的压缩,压缩历史发生冲突后,会让你解决问题.
        解决冲突:修改、add、commi.
        为解决冲突这一操作添加的信息会变成最终的信息。
    git clone +项目的url
    	该命令会把远程的库克隆到本地库目录下,与.git目录同级
    

    2.git中stash命令作用以及相关其他命令

    当你想要保存当前的暂存区和工作区的状态的时候,你可以使用git stash命令。比如:你正在开发一个新功能,写了一些代码(保存暂存的和没有暂存的或没有记录的),现在需要去修复一个紧急bug,你又不想提交,这时你可以选择保存当前工作区和暂存区的内容,需要的时候恢复。
    这个命令会保存当前的暂存区和工作区的状态,然后返回到HEAD(git reset —hard HEAD)。最新的stach可以在.git/refs/stash中看到。
    git stash  save
    
    save [-p|—patch]  [-k|--[no-]keep-index]   [-u|--include-untracked]   [-a|—all]   [-q|—quiet]   [message]
    [ ]代表这个参数是可选的
    -k|--keep-index 表示 stash之后,所有对暂存区的改变会维持不变(比如你之前add 了一个file,提交之后,git status还是能够在暂存区看到你的 add),如果是—no-keep-index的话,stash之后的状态就是git reset —hard HEAD。
    -p|—patch  不太了解,只知道用了会开启一个交互式的界面让你选择
    -u|--include-untracked  会把没有记录到的文件也保存下来(比如你新建了一个文件,但是还没有git add,stash也会把这个文件保存下来)
    -a|—all  会把忽略的文件也保存下来(.gitignore中的)
    -q|—quiet  终端不打印输出
    message 一个对这个stash的描述,如果执行git stash list,我们能够看到这个描述
    
    git stash list
    
    list  [options]
    不加options,会列出所有的stash,你也可以指定某个stash(stash@{0}代表最近的stash)
    
    git stash show [stash]
    显示和他parent的差异
    git stash pop
    
    pop [—index]   [-q|—quiet]   [stash]
    与git stash save执行相反的操作,从stash list中移除这个stash,恢复工作区
    —index 如果指定了这个参数,那么不仅恢复工作区,也会恢复暂存区
    
    git stash apply
    
    apply [—index]     [-q|—quiet]     [stash]
    和pop类似,区别在于apply不会吧stash从stash list中移除
    
    git stash branch
    
    branch  [branchname]   [stash]
    以这个stash被创建的那个commit为起点,创建一个叫branchname的分支,然后再在这个分支执行git stash pop —index stash
    
    git stash clear
    清空当前所有的stash
    git stash create
    创建一个stash,并返回他的commit对象,但并不在refs中存储这个对象
    git stash store
    存储通过create创建的stash。(可以在refs的stash和log/refs下看到这个stash)
    

    3.git 中 merge 和 rebase命令 的区别。

    1.采用merge和rebase后,git log的区别,merge命令不会保留merge的分支的commit:
    2.处理冲突的方式:
    (一股脑)使用merge命令合并分支,解决完冲突,执行git add .和git commit -m'fix conflict'。这个时候会产生一个commit。
    (交互式)使用rebase命令合并分支,解决完冲突,执行git add .和git rebase --continue,不会产生额外的commit。这样的好处是,‘干净’,分支上不会有无意义的解决分支的commit;坏处,如果合并的分支中存在多个commit,需要重复处理多次冲突。
    3.git pull和git pull --rebase区别:git pull做了两个操作分别是‘获取’和合并。所以加了rebase就是以rebase的方式进行合并分支,默认为merge。
    
    注意:只有在冲突的时候,解决完冲突才会自动产生一个commit。
    如果想在没有冲突的情况下也自动生成一个commit,记录此次合并就可以用:git merge --no-ff命令,
    如果不加 --no-ff 则被合并的分支之前的commit都会被抹去,只会保留一个解决冲突后的 merge commit。
    

    4.公司如何基于git做的协同开发?

    5.如何基于git实现代码review?

    ...
    

    6.git如何实现v1.0 、v2.0 等版本的管理?

    ...
    

    7.什么是gitlab?

    ...
    

    8.github和gitlab的区别?

    GitLab和GitHub一样属于第三方基于Git开发的作品,免费且开源,与Github类似,可以注册用户,任意提交你的代码,添加SSHKey等等(https://github.com/gitlabhq/gitlabhq 基于MIT协议)。
    不同的是,GitLab是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发,你总不可能把团队内部的智慧总放在别人的服务器上吧?
    简单来说可把GitLab看作个人版的GitHub。
    

    9.如何为github上牛逼的开源项目贡献代码?

    ..
    

    10.git中 .gitignore文件的作用?

    ...
    

    ...
    ...
    
  • 相关阅读:
    解析CIDR表示的IP段表示的范围
    [Python] 使用乘号复制变量引起的问题
    [Python] 字典dict添加二级键值的问题
    [Java] [刷题] 连续自然数和
    [Java] [刷题] 多个整数连接为最大整数问题
    [CentOS] 编译安装Python3后pip3安装的库如何在命令行调用
    [CentOS] 宝塔面板与Python3的恩怨情仇
    [易语言] 两种字节序的直观比较
    [Java] [刷题] Excel地址转换
    [Java] 运算精度
  • 原文地址:https://www.cnblogs.com/apollo1616/p/10440412.html
Copyright © 2011-2022 走看看