Git周考多选&简答_0919
多选题:
1、以下哪些命令可以查看历史或差异?( )
- git log –oneline
- git diff HEAD~1 HEAD
- git show commit_id
- git blame filename
参考答案:ABCD
选项解析:
- git log –oneline
- 正确。该命令用于查看提交历史,以简洁的一行格式显示每个提交的信息(提交ID和消息)。它属于“查看历史”范畴。
- git diff HEAD~1 HEAD
- 正确。该命令比较两个提交之间的差异:
HEAD~1表示前一个提交,HEAD表示当前提交。它显示文件内容的变化,属于“查看差异”范畴。- git show commit_id
- 正确。该命令显示指定提交(通过 commit_id)的详细信息,包括提交元数据和文件差异(diff)。因此,它既能查看历史(提交信息),又能查看差异(文件变化)。
- git blame filename
- 正确。该命令显示文件中每一行的最后修改信息,包括提交ID、作者和修改时间。它用于“查看历史”(追踪文件的变更来源),虽然不是传统差异比较,但能帮助理解变更历史。
2、以下关于分支的说法,正确的是?( )
- git checkout -b feature 会创建并切换到 feature 分支
- git branch 命令默认列出所有本地分支
- 删除远程分支的命令是 git push origin –delete branchname
- git merge 会产生合并提交,而 git rebase 不会产生
参考答案:ABCD
选项解析:
- git checkout -b feature 会创建并切换到 feature 分支
- 正确。这是 Git 的标准语法:
-b选项表示创建新分支并立即切换到它。例如,git checkout -b feature会基于当前分支创建feature分支并切换过去。- git branch 命令默认列出所有本地分支
- 正确。
git branch不加任何参数时,默认列出所有本地分支(当前分支前标记*)。如果要查看远程分支,需使用git branch -r或git branch -a。- 删除远程分支的命令是 git push origin –delete branchname
- 正确。这是删除远程分支的标准命令,例如
git push origin --delete feature会删除名为feature的远程分支。它通过向远程仓库推送删除请求实现。
3、以下哪些操作可以用于撤销提交?( )
- git reset –hard HEAD~1
- git revert HEAD
- git commit –amend
- git checkout HEAD~1
参考答案:ABC
选项解析:
- git reset –hard HEAD~1
- 正确。该命令将当前分支重置到前一个提交(
HEAD~1),并丢弃工作区和暂存区的更改。它直接移除最新提交,适用于本地撤销(尚未推送的场景)。- git revert HEAD
- 正确。该命令创建一个新的提交来撤销指定提交(例如
HEAD)的更改。它不修改历史,而是添加一个逆向提交,适用于公共历史(如已推送的场景)。- git commit –amend
- 正确。该命令修改最新提交:可以更改提交消息或添加新更改到上一个提交中。它间接用于“撤销”提交,因为你可以修正错误内容(如移除敏感信息),效果上撤销了上一次提交的缺陷。
- git checkout HEAD~1
- 错误。该命令检出前一个提交(
HEAD~1)的状态,使工作区进入“分离头指针”模式。但这仅用于查看旧版本,不改变提交历史,也不撤销提交。工作区变化不会影响分支指针,因此不能用于撤销提交。
4、关于 git fetch 和 git pull,以下说法正确的是?( )
- git fetch 只下载远程更新,不自动合并
- git pull 等价于 git fetch + git merge
- git pull 比 git fetch 更安全,推荐优先使用
- git fetch 不会改变本地工作区内容
参考答案:ABD
选项解析:
git fetch 只下载远程更新,不自动合并
- 正确。
git fetch从远程仓库下载最新数据(如新提交和分支),但只更新本地的远程跟踪分支(如origin/main),不修改本地分支或工作区。需要手动合并(如git merge)。git pull 等价于 git fetch + git merge
- 正确。
git pull是git fetch(下载远程更新)后跟git merge(合并到当前分支)的快捷方式。默认行为等同于git fetch && git merge origin/current-branch。git pull 比 git fetch 更安全,推荐优先使用
错误
。解析:
git pull自动合并可能引入冲突或不稳定:因为它直接合并下载的更改,如果本地有未提交的更改,可能导致冲突或意外覆盖。git fetch更安全:它仅下载数据,让用户手动检查后再合并(例如git log origin/main查看差异),避免自动合并的风险。实践中,推荐优先使用git fetch以更好地控制流程。git fetch 不会改变本地工作区内容
- 正确。
git fetch只更新本地的远程引用(如origin/main),不触及工作区文件、暂存区或本地分支。工作区保持原状。
5、以下哪些是 Git 的核心概念?( )
- 工作区(Working Directory)
- 暂存区(Staging Area)
- 本地仓库(Local Repository)
- 远程仓库(Remote Repository)
参考答案:ABCD
选项解析:
- 工作区(Working Directory)
- 正确。工作区是用户编辑文件的目录,所有未跟踪或修改的文件都在此区域。它是 Git 工作流的起点。
- 暂存区(Staging Area)
- 正确。暂存区(也称为索引)是临时存储区,用户通过
git add将工作区的更改添加到这里,准备下一次提交。- 本地仓库(Local Repository)
- 正确。本地仓库存储提交历史、分支和元数据(位于
.git目录)。通过git commit,暂存区内容被永久保存到此。- 远程仓库(Remote Repository)
- 正确。远程仓库是共享的代码存储库(如 GitHub),用于团队协作。通过
git push/git fetch与本地交互。
主观题
1、远程仓库管理所涉及的全部指令和分支管理所涉及的全部指令?
远程仓库命令:
克隆:gitclone仓库地址
拉取:gitpull
创建远程仓库别名:gitr emote add origin main
推送:gitpush
查看远程仓库信息:gitremote-v
gitremote-a
分支管理:
查看当前分支:gitbranch
查看所有分支信息:gitgranch-v
创建分支:gitbranch-b分支名
创建并切换分支:gitcheckout-b分支名
gitswitch-c分支名
删除分支:gitbranch-d分支名
gitbranch-D分支名
推送指定分支到远程:gitpush分支名origin/main
分支合并:gitmerge 分支名
gitrebase分支名
2、你在开发新功能时创建了一个 feature 分支,现在需要将主分支(main)的最新改动合并到你的 feature 分支中。请写出完整的操作步骤(包括命令),并说明使用 merge 和 rebase 两种方式的区别和各自的优缺点。
操作步骤:
切换到主分支:gitswitchmain
拉取最新提交和分支信息:gitpull
合并我的feature分支:gitmergefeature
打开文件,手动解决冲突,gitadd标记冲突已解决,提交一个版本
merge和rebase的区别和优缺点:
merge和rebase都是用于“整合分支”的工具,但是他们的实现方式,历史记录结构等完全不同
merge是“合并”,合并指定的分区
rebase是“变基”,把你的提交“挪到”目标分支的最新提交之后,保持历史记录结构线性简洁
merge 更安全(保留历史),rebase 更干净(但重写历史有风险)。
3、请简述 Git 中“工作区”、“暂存区”和“本地仓库”三者之间的关系,并说明在典型开发流程中它们是如何协作的。
工作区:你正在编辑文件所在的区域
暂存区:临时区域,通过gitadd命令暂时存储工作区的内容
本地仓库:暂存区通过gitcommit提交一个版本后,保存内容的区域
开发流程:在工作区修改文件,通过gitadd保存到暂存区,再通过giecommit提交版本存储到本地仓库
4、假设你不小心提交(commit)了一个包含敏感信息(如密码)的文件,且尚未推送到远程仓库。请描述至少两种安全撤销该提交的方法,并写出对应的 Git 命令。如果已经推送到远程仓库,又该如何处理?
安全撤销方法:
一,通过命令gitreset–hard版本号,回到上一个版本
二,使用命令gitrevert前一个版本号,回到上一次没有提交敏感文件的版本继续工作
已经推送到远程仓库的方法:
先使用gitpull拉取到本地,创建一个新分支,回到提交敏感文件之前的版本,之后合并主分支
5、本地提交版本推送到远程仓库多人协作全部过程
一,开发者克隆远程仓库到本地(gitclone仓库地址)
二,创建新分支:基于主分支main/master创建新分支(gitswitch-cdev)
三,在本地进行开发与提交
1,工作区修改文件,提交到暂存区(gitadd-A)
2,提交版本到本地仓库(gitcommit-m“描述”)
3,添加远程仓库别名gitremoteaddorigin仓库地址)
四,推送到远程仓库(gitpushoriginmain)
五,创建PullRequest,基于目标分支创建PR,请求更改合并到主分支
六,代码审查,团队成员审查PR,并提出修改建议,开发者根据反馈修改代码并提交版本
七,合并PR,审查通过后将目标分支合并到主分支上(gitmergedev)
八,删除合并合并后的主分支
九,同步主分支,拉取最新的版本和分支信息到本地,保持同步
十,解决冲突,多人修改同一文件时出现冲突,手动解决标记已解决,之后提交版本
十一,持续集成,团队成员通过CI或CD工具进行自动化,保证代码质量
十二,定时同步,开发者定期拉取最新版本和分支信息,减少冲突






