Git基础

测试工程师大概在什么场景下应用**Git基础**知识?

1.取消服务器版本库中ID为a2387的提交,而且不能引起历史提交的变更,用什么操作?(C)
A、git rebase -i a2387^
B、git checkout a2387^–.
C、git revert a2387
D、git reset --hard a2387^
解析:git revert不会改变现有历史,而是生成一个新的commit来反转指定commit中的change


2.关于git clone下面说法错误的是(B)
A、克隆时所有分支均被克隆,但只有HEAD指向的分支被检出
B、可以通过git clone --single-branch命令实现只克隆一个分支
C、克隆出的工作区中执行git log、git status、git checkout 、git commit 等操作不会去访问远程版本库
D、克隆时只有远程版本库HEAD指向的分支被克隆
解析: git clone会fetch所有远程branch到本地,但只有远程仓库HEAD指向的branch会在本地checkout


3.一个图片文件logo.png冲突了如何取出他人的版本(C)
A、git show :1:./logo.png > logo.png-theirs
B、git show :2:./logo.png > logo.png-theirs
C、git show :3:./logo.png > logo.png-theirs
D、git show :0:./logo.png > logo.png-theirs


4.下面哪一个命令不会改变提交历史?(B)
A、git reset --hard HEAD~1
B、git checkout HEAD^^.
C、git rebase -i HEAD^^
D、git commit --amend
解析:git reset --hard会重置当前branch;git checkout只会改变HEAD,不会影响当前branch;git rebase会嫁接连续的rev list到new base,进而改变历史git commit --amend会修改最近一次commit


6.使用和其他人不一样的IDE软件,总是在目录下生成以.xx为后缀的临时文件。如何避免由于自己的误操作导致此类文件被添加到版本库中(C)
A、执行git clean -f 删除临时性文件
B、向版本库中添加一个.gitignore文件,其中包含一条内容为*.xx的记录
C、在文件.git/info/exclude中添加一条内容为*.xx的记录
D、更换另外一款IDE软件
解析:这里的主要区别在于使用.gitignore还是.git/info/exclude。两者的主要区别在于.gitignore会被push到server上与其他人共享,而.git/info/exclude完全工作在本地


7.如果提示提交内容为空、不能提交,则最为合适的处理方式是(A)
A、执行git status查看状态,再执行git add命令选择要提交的文件,然后提交
B、执行git commit --allow-empty ,允许空提交
C、执行git commit -a ,提交所有改动
D、执行git commit --amend进行修补提交
解析:这种情况往往是修改了工作区的文件,但是没有运行git add来将修改的文件添加到index中。正确方法为git add需要commit的文件,再执行git commit。git commit --allow-empty只会创建一个空提交,工作区的内容仍旧未提交至git repo里。git commit -a会直接提交所有修改/删除的文件,通常不推荐此操作,因为很可能会将尚未ready的改变一并提交


8.关于对象库(.git/objects)说法错误的是(B)
A、两个内容相同文件名不同的文件,在对象库中仅有一个拷贝
B、对象库执行git gc 操作后,reflog会被清空导致其中记录的未跟踪提交及指向的文件被丢弃
C、删除文件后,再通过添加相同文件找回,不会造成版本库的冗余
D、对象库并非一直保持最优存储,而是通过周期性地执行git gc优化版本库
解析: git gc会调用git reflog expire --all;而git reflog expire默认只会删除90天前的记录;如果想即使生效,则应该使用git reflogexpire --expire=now --all


9.当一个提交说明显示为souce code refactor (fix #529),下面哪个说法是正确的?(D)
A、这个提交只是代码重构,并未修复任何东西,因此没有改变版本库的提交历史
B、这个提交修正了第529号提交,没有改变版本库的提交历史
C、这个提交撤销了第529号提交,改变了版本库的提交历史
D、这个提交和项目的缺陷跟踪平台(如Redmine)关联,并会更新相关问题的状态
解析:用过JIRA,Redmine之类工具的都懂的


10.关于删除分支XX,下列说法正确的是:(D)
A、执行git push origin :XX来删除远程版本库的XX分支
B、执行git branch -D XX删除分支,总是能成功
C、远程版本库删除的分支,在执行gitfetch时本地分支自动删除
D、本地删除的分支,执行git push时,远程分支亦自动删除

解析:使用git push origin :XX可以删除远程库中的XX分支。git branch -D xx无法删除当前在分支。默认执行git fetch,只会fetch远程仓在的分支。默认执行git push,只会push在远和库存在对应分支的本地分支。


11.下面的操作中哪一个不能确认维护分支maint上所有的 bugfix提交均已合并至当前分支master 中(B)
A、git rev-list …maint的输出为空
B、在maint分支成功地执行gitmerge master
C、git log …maint的输出为空
D、新版本发布,在maint分支执行git merge --ff-only master成功
解析:git rev-list master…maint 会输出所有出现在maint历史中但未出现再master历史中的commit列表。如果列表为空则表示master分支已经包含所有maint上的bugfix。git log master…maint原理同上。在maint分支上执行git merge --ff-only master成功表示在master分支的历史中已经包含了maint分支上的change,因此此时merge master分支可以直接移动maint分支指向的commit进行快进合并。


12.所有改动的文件都已加入暂存区,若希望将其中的other.py文件下次再提交,如何操作?(A)
A、git reset – other.py
B、git checkout – other.py
C、git checkout HEAD other.py
D、git reset --hard – other.py
E、git name-rev HEAD
F、git --version
解析:git reset – filename用于使用HEAD中的filename覆盖index中的版本


13.工作在特性分支,常常因为执行git push 默认推送所有本地和远程共有分支,导致非当前分支报告non-fast-forward错误。如果设置只推送当前分支可避免此类问题。下面操作正确的是(A)
A、git config --global push.defaultupstream
B、git config --global pull.rebase true
C、git config --global receive.denyDeletes true
D、git config --global pager.statustrue
解析:git config --global push.defaultupstream不带参数push是仅推送当前branch。git config --global pull.rebase true在执行gitpull时,将远程分支获取到本地后使用rebase,而不是merge来将远程change应用到本地分支。git config --global receive.denyDeletes true设置此选项则git-receive-pack不会响应分支删除操作。


14.仅将工作区中修改的文件添加到暂存区(新增文件不添加),以备提交,用什么命令标记最快?(D)
A、git add -A
B、git add -p
C、git add -i
D、git add -u
解析:git add -A添加所有文件,包括新添加的文件。git add -p通过逐一检查工作区文件与index文件diff输出来决定是否添加文件。git add -i交互式的选择要git add的文件。git add -u添加所有修改的文件,不包括新添加的文件。


15.如果把项目中文件hello.c的内容破坏了,如何使其还原至原始版本?(B)
A、git reset – hello.c
B、git checkout HEAD – hello.c
C、git revert hello.c
D、git update hello.c
解析:git reset – hello.c只能恢复index中的文件,工作区的文件并不会被重置。git checkout HEAD – hello.c同时恢复index与工作区中的文件。git revert hello.c非法操作。git update hello.c非法操作。


16.修改的文档meeting.doc尚未提交,因为错误地执行了git reset --hard 导致数据丢失。丢失的数据能找回么?(C)
A、不能。执行硬重置使工作区文件被覆盖,导致数据丢失无法找回。
B、能。可以通过git checkoutHEAD@{1} – meeting.doc找回。
C、不确定。如果在重置前执行了gitadd命令将meeting.doc加入了暂存区,则可以在对象库中处于悬空状态的文件中找到。
D、不能。因为未提交所以无法找回。
解析:每次执行git add时,git会将修改过的文件以一个新object的形式加入到git仓库中,因此,如果此时执行git reset --hard,则这些新加入的object已经不被任何commit引用(包括index),此时运行git fsck会发现,每一次git add操作添加的文件版本都会显示为一个dangling object。


  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值