git八股文
时间: 2025-05-17 07:24:05 浏览: 20
### 关于 Git 的常见面试问题及答案
#### 什么是 Git?
Git 是一种分布式版本控制系统,允许开发者跟踪文件的变化并协作开发软件。它由 Linux 内核创始人 Linus Torvalds 创建,旨在高效管理大型项目的源代码[^1]。
#### 解释一下 Git 中的分支概念及其用途。
分支是 Git 的核心功能之一,允许多条独立的历史记录共存而不互相干扰。通过分支,团队成员可以在不影响主线的情况下进行实验性开发或修复 Bug。常见的操作包括 `git branch` 查看分支列表以及 `git checkout` 切换到指定分支。
#### 如何解决冲突?
当多个开发者在同一部分代码上进行了不同的更改时会发生冲突。解决方法是在合并之前手动编辑冲突区域,并标记为已解决后再继续完成合并过程。可以使用命令 `git merge --abort` 来终止当前未完成的合并尝试。
#### 描述下 `.gitignore` 文件的作用。
`.gitignore` 文件定义了一组模式匹配规则,用来排除不需要被纳入版本控制系统的特定类型的文件或者目录结构。这有助于保持仓库整洁干净,减少不必要的数据上传至远程服务器。
#### Git Rebase 和 Merge 的主要区别在哪里?
虽然两者都可以实现将不同分支上的改动集成在一起的目的,但是它们的方式有所不同:Merge会保留所有的提交历史;而Rebase则试图让最终的结果看起来像是一系列线性的变更集合。因此,在公开共享的分支上推荐使用Merge来维护清晰可见的历史轨迹。
#### 怎样回滚某次提交?
如果只是想简单地丢弃最近的一次提交,则可以直接运行 `git reset HEAD~1` 。如果是想要撤销某个具体时间点之前的全部更新动作,则需要用到更为复杂的交互式 rebase 流程(`git rebase -i`) 或者专门设计用于这种情况下的 revert 功能 (`git revert <commit-hash>`) [^3].
以下是几个实用的小技巧:
- 如果误推了敏感信息上去可以通过强制推送覆盖掉旧版:`git push origin master --force`.
- 当发现本地有未提交的新文件又不想删除他们可以用 stash 技术暂时保存起来再处理.
```bash
# 将所有修改压入栈顶
git stash save 'message'
# 应用最上面的那个stash, 并将其从stack中移除.
git stash pop
# 只查看stashes的内容清单
git stash list
```
---
### 提高篇
#### 谈谈你对 Git Reset 的理解?
Reset 主要分为三种形式 soft,mixed(默认),hard ,分别对应不同程度的影响范围. Soft只会改变HEAD指针位置; Mixed除了移动HEAD还会清空index/staging area ; Hard则是连working directory都会受到影响.
#### 举例说明如何利用 cherry-pick 实现跨分支选取单个 commit ?
假设我们有一个 featureA 分支包含了若干 commits ,其中只有其中一个是我们希望同步给另一个 releaseB 分支使用的 . 此时就可以执行如下指令 :
```bash
#切换目标分支
git checkout releaseB
#挑选来自featureA中的那个特殊commit应用到这里面来
git cherry-pick abcdefg...
```
这样就成功把单独的一个 patch 移植过去了 .
---
### 高级话题
#### 讨论一下 Bisect 工具的实际应用场景有哪些 ?
当我们遇到难以定位原因的大规模回归测试失败案例时候,bisect工具可以帮助快速缩小怀疑区间直至找到引入 bug 的确切 commit id .
其基本原理就是二分查找法不断比较中间节点的状态直到锁定元凶为止.
启动流程大致如此:
```bash
# 开始 bisect 进程告诉 git 我们现在处于 bad 状态
git bisect start && git bisect bad
# 定义最早期的好状态作为对比基准
git bisect good v1.0
... (反复试验自动分配出来的候选版本)
最后结束整个bisect session :
git bisect reset
```
---
阅读全文
相关推荐


















