Git作业_0916
一、主观题
1.创建并克隆仓库:
2.本地修改1.txt文件
3.远程修改1.txt文件,并提交版本
4.执行git pull 报错 (因本地有未提交修改,与远程冲突)
5.执行git stash存储工作区修改,使用git stash list查看存储栈
6.执行git pull 拉取远程最新版本(此时本地无修改,可顺利合并)
7.使用git stash pop 恢复之前暂存的修改(自动尝试合并,若冲突需手动解决)
8.手动编辑冲突文件,解决冲突后执行 git add -A 标记为已解决
9.提交合并结果并上传远程仓库 git push
2. git show有什么作用?
git show 命令用于显示 Git 仓库中对象(如提交 commit、标签 tag、文件 blob 等)的详细信息。默认显示最近一次提交的元数据和变更内容。
是查看历史变更和对象内容的核心命令。
3. git blame 有什么作用?
git blame 用于逐行显示文件中每行代码的最后修改者、提交哈希、修改时间和具体内容,帮助追踪代码变更历史和责任归属。
运行 git blame <文件路径> 可直观看到每行的“责任人”和修改上下文。
对代码审查、Bug 追溯、交接维护非常有用。
4. 再练习一遍撤销还原操作
4.1 工作区撤销(丢弃工作区未暂存的修改)
在工作区修改了文件
使用git status 查看那些文件被修改了
![]()
使用以下任一命令丢弃修改,恢复到最近一次提交的状态:
使用git checkout – 被恢复的文件
1
2
3
4 git status
git checkout -- readme.txt
// 或者
git restore readme.txt

4.2 暂存盘软撤销(取消暂存,保留工作区内容)
- 在工作区修改文件
- 使用
git add添加到暂存区- 使用
git status查看状态- 取消暂存(但保留工作区内容):
方法1(传统):
1
2
3 git status
git reset HEAD readme.txt # 取消暂存
git checkout -- readme.txt # 丢弃工作区修改(可选)方法2(推荐,Git 2.23+):
1
2 git restore --staged readme.txt # 取消暂存
git restore readme.txt # 丢弃工作区修改(可选)注意:先修改一下文件,然后使用git add 将修改过后的文件添加到暂存盘,然后做上面的练习
1.工作区修改文件,添加至暂存区:
2.使用git status查看查看状态:

使用 git reset HEAD 文件名 取消暂存 + git checkout -- 文件名 丢弃修改:
4.3 暂存盘硬撤销(恢复修改前的工作区内容)(取消暂存并丢弃工作区修改)
1 | 将被修改了文件添加到暂存盘 |
4.2 版本软回滚(保留工作区和暂存区内容,仅移动 HEAD)
git reset –soft 短版本号
目标:回滚到 22222 提交(3bfdc42),但保留当前 1.txt 的所有内容(包括 33333)
1 | git reset --soft 3bfdc42 |
此时提交历史回到 3bfdc42,但工作区和暂存区保持不变,可重新 commit。
4.3 版本硬回滚(工作区内容也恢复)(工作区、暂存区、HEAD 全部回退)
git reset –hard 短版本号
目标:彻底回滚到 11111 提交(2acb598),工作区内容也恢复成那时的样子
⚠️ 此操作不可逆!未提交的修改将永久丢失。
4.4 恢复恢复刚才的 33333 提交,找回被 reset –hard 删除的提交
使用 git reflog 查看 HEAD 移动历史,找到被删除提交的哈希:
1 | git reflog |
5. git reset 和 git revert的区别?
git revert:创建一个新的提交来“撤销”旧提交的变更,原提交历史保留。安全,适用于共享分支。
示例:git revert <commit-id>会生成一个反向提交。git reset:将 HEAD、暂存区、工作区重置到指定提交,之后的提交会被“丢弃”(可通过 reflog 恢复)。会改写历史,仅适用于本地或未推送分支。
三种模式:
--soft:仅移动 HEAD--mixed(默认):移动 HEAD + 重置暂存区--hard:移动 HEAD + 重置暂存区 + 重置工作区
git revert是用一次新的commit来回滚之前的commit,此次提交之前的commit都会被保留;
git reset是回到某次提交,提交及之前的commit都会被保留,但是此commit id之后的修改都会被删除
6. 练习git revert,假设有4个版本,我将回滚到版本2,然后合并修改之后新增版本2增强版,如何实现?
查看提交历史:git log --oneline
找到要撤销的提交(如版本3和版本4),执行:
1 | git revert <版本4的commit-id> |
这会生成两个新提交,撤销版本3和4的变更,此时代码状态等同于“版本2”,但历史保留版本3、4、revert1、revert2。
在此基础上继续开发“版本2增强版”,修改后提交:
1 | # 修改文件 |
⚠️ 注意:git reset --hard 是直接回退历史,不适用于协作场景。revert 才是协作推荐方式。
7. git 可以同时支持几种仓库地址?
Git可以同时支持多种仓库地址,比如HTTPS和SSH
可以在本地仓库中使用git remote add命令为同一个远程仓库添加多个地址
8. 在gitee上克隆别人的仓库,默认克隆了几个分支?是否默认创建了远程仓库别名?你能否往这个仓库推送你的版本?
默认只克隆默认分支(通常是
main或master)。自动创建远程别名
origin。默认无推送权限(除非你是仓库协作者或拥有者)需要开发者权限。需 Fork 后克隆自己的仓库,修改后提交 Pull Request。
9. 一个文件添加到了git仓库,那么我删除这个文件,怎么恢复它?假如我想彻底从git仓库删除这个文件,该怎么做?
恢复已删除的文件(从最近提交中恢复):
1 | git checkout -- 文件名 |
彻底从 Git 仓库删除文件(停止追踪并删除工作区文件):
1 | git rm 文件名 |
若只想停止追踪但保留工作区文件:
1 | git rm --cached 文件名 |
git rm 不但会把工作区里面的文件删除,还会把版本库里面的文件也删除,做到彻底移除掉这个文件
10. 练习远程仓库、新增远程仓库、删除远程仓库、查看以及查看详细远程仓库
1 | # 克隆远程仓库 |
11. git pull和git push的区别?
- git pull:从远程仓库拉取最新提交并自动合并到当前分支。相当于
git fetch + git merge。 - git push:将本地提交推送到远程仓库,更新远程分支。
12. git push -u 和git push -f 的区别是什么?
-u (或 --set-upstream)以非常安全的模式提交到远程,
比如远 程早一个版本,它会提示你先git pull 拉取下来
-f 强制覆盖模式,强制推送,覆盖远程分支历史。危险操作!会丢弃远程分支上其他人的提交。
更安全替代:--force-with-lease(仅在远程未更新时强制推送)
13. 假如我从远程克隆了一个项目,然后我想给这个项目贡献自己的代码?你的理解你应该接下来怎么办?
需要修改
- Fork 项目到自己的账号下(如果是开源项目)。
- 克隆自己的 Fork:
git clone 自己的仓库地址 - 创建新分支开发:
git checkout -b feature/xxx - 修改、提交:
git add . && git commit -m "message" - 推送到自己的远程:
git push origin feature/xxx - 在网页端发起 Pull Request(PR)到原项目。
- 等待审核合并。
14. 我能不能 不经过git add 直接 git commit 提交一个版本?
不行,在 Git 中必须先将变更(git add)添加到暂存区(Stage/Index),然后才能提交(git commit)。这是 Git 的基本工作流程。
15. 有哪些指令可以知道git 仓库改动的信息?
git status:查看工作区和暂存区状态(修改、新增、删除)git diff:查看工作区与暂存区差异git diff --cached:查看暂存区与 HEAD 差异git log:查看提交历史git log -p:查看提交历史及每次变更详情git reflog:查看 HEAD 移动记录(包括 reset、checkout 等)git show <commit>:查看某次提交的详情git blame <file>:查看文件每行最后修改者
16. 我有一个项目,想要git来做版本控制管理,第一步应该做什么?
初始化本地 Git 仓库,使用命令git init,生成 .git 目录。
然后添加文件并首次提交:
1 | git add . |
17. 我有一个项目,5个人开发,你应该怎么做,才能确保这个5个可以互相协作开发不出乱子?你的计划是什么?
协作规范:
- 使用远程仓库(如 GitHub/GitLab/Gitee)作为中央仓库。
- 每人 Fork 或克隆仓库到本地。
- 基于分支开发:
main/master分支保护,禁止直接推送。- 新功能/修复在
feature/xxx或fix/xxx分支开发。
- 每日开始前:
git pull origin main同步主干。 - 开发完成后:推送分支到远程,发起 Pull Request/Merge Request。
- Code Review:团队成员审核代码后合并。
- 解决冲突:拉取最新主干,合并到自己分支解决冲突后再提 PR。
- 使用 .gitignore 忽略临时文件。
- 提交信息规范:清晰描述变更内容。
18. 早上9点公司例会,组长讨论了每个人今日的任务,你分到了一些bug修改,共10条bug,请问今天这一天你打算怎么安排修改?晚上下班前组长要求你们每个人提交今天的任务,你又该怎么做?
安排:
- 从主干拉取最新代码:
git pull origin main - 为这组 Bug 创建独立分支:
git checkout -b fix/bug-set-20250917 - 逐个修复 Bug,每个 Bug 修复后单独提交(原子提交):
1 | # 修复 bug1 |
晚上下班前:
推送分支:
git push origin fix/bug-set-20250917在 Git 平台发起 Merge Request / Pull Request 到
main分支通知组长或相关同事进行 Code Review
不要直接合并到主干(除非流程允许)
19. 接上面,假如你在修改上面的bug时,发现第5个bug,仍然存在问题,你现在想到另一种解决办法,你打算怎么样?
不要直接在原提交上修改。
在当前分支继续修改代码,测试新方案。
新增一个提交:
1 | git add . |
如果原提交有误,可考虑:
git commit --amend:如果尚未推送,可修改上一次提交。- 或使用
git revert撤销原修复提交,再提交新方案(适用于已推送场景)。
避免使用 git reset 修改历史,以免影响协作。
20. 练习从远程克隆仓库到本地,然后做一些修改,修改后提交到远程仓库,顺利提交成功后,再练习本地修改后,再提交到远程,此时远程已经有人修改了比你早提交了版本,你提交不了,发生冲突了,你该如何解决后,提交到远程。
手动解决冲突:编辑冲突文件,删除 <<<<<<<、=======、>>>>>>> 标记,保留正确内容。
标记冲突已解决:
1 | git add . |
再次推送:
1 | git push origin main |
二、 今晚默写和语音题
1. 如何创建和合并分支?(默写+语音朗读)
创建分支:
1 | #新建一个分支,但依然停留在当前分支 |
合并分支:
1 | #合并指定分支到当前分支 |
2. 如何将本地仓库与远程仓库同步?(默写+语音朗读)
使用git fetch或git pull命令从远程仓库下载最新的提交和分支信息。
然后,使用git merge命令或git rebase命令将本地分支与远程分支合并。
最后,使用git push命令将本地提交推送到远程仓库。
答案在下面的网址
三、 明天早上默写和语音题
1. 如何解决合并冲突?(默写+面试提问)
合并冲突发生在合并分支时,当两个分支的相同部分产生了不同的更改时,解决合并冲突一般步骤如下:
使用git status命令查看冲突的文件。
打开冲突文件,手动解决冲突并选择要保留的更改。
使用git add命令将解决冲突后的文件标记为已解决。
使用git commit命令提交解决冲突的结果
2. 如何将本地仓库与远程仓库同步?(默写+面试提问)
使用git fetch或git pull命令从远程仓库下载最新的提交和分支信息。
然后,使用git merge命令或git rebase命令将本地分支与远程分支合并。
最后,使用git push命令将本地提交推送到远程仓库。
3. 如何创建和合并分支?(默写+面试提问)
使用git branch命令创建新分支,例如git branch bug。
创建分支后,使用git checkout命令切换到新分支,例如git checkout bug。
要将分支合并到当前分支,可以使用git merge命令,例如git merge dev。
4. 请介绍git多人远程协作的流程?(默写+面试提问)
- 克隆远程仓库
首先,每个开发者需要将远程仓库克隆到本地:
1 | git clone <远程仓库URL> |
- 创建分支
为了隔离开发工作,开发者应基于主分支(如 main 或 master)创建新分支:
1 | git checkout -b <分支名> |
- 开发与提交
在本地分支上进行开发,完成后提交更改:
1 | git add . |
- 推送分支
将本地分支推送到远程仓库:
1 | git push origin <分支名> |
- 创建 Pull Request (PR)
在远程仓库(如 GitHub、GitLab)上,基于推送的分支创建 PR,请求将更改合并到主分支。
- 代码审查
团队成员审查 PR,提出修改建议。开发者根据反馈更新代码,并推送新的提交。
- 合并 Pull Request (PR)
审查通过后,将 PR 合并到主分支。
- 同步主分支
合并后,开发者应拉取最新的主分支到本地,保持同步:
1 | git checkout main |
- 删除已合并的分支
合并完成后,可以删除远程和本地的已合并分支:
1 | git push origin --delete <分支名> |
- 处理冲突
如果多人修改了同一文件,可能会产生冲突。解决冲突后,标记冲突已解决并提交:
1 | git add <冲突文件> |
- 持续集成
许多团队使用 CI/CD 工具(如 Jenkins、GitHub Actions)自动测试和部署代码,确保每次合并后的代码质量。
- 定期同步
开发者应定期拉取主分支,保持本地代码与远程仓库同步,减少冲突。
总结:
多人协作的关键在于:
使用分支隔离开发
通过 PR 进行代码审查
定期同步主分支
及时解决冲突






