git相关面试题
git相关面试题
1. Git和SVN的区别
Git | SVN |
---|---|
1. Git是一个分布式的版本控制工具 | 1. SVN 是集中版本控制工具 |
2.它属于第3代版本控制工具 | 2.它属于第2代版本控制工具 |
3.客户端可以在其本地系统上克隆整个存储库 | 3.版本历史记录存储在服务器端存储库中 |
4.即使离线也可以提交 | 4.只允许在线提交 |
5.Push/pull 操作更快 | 5.Push/pull 操作较慢 |
6.工程可以用 commit 自动共享 | 6.没有任何东西自动共享 |
2. Git工作流程
- 在工作目录中修改某些文件
- 对修改后的文件进行快照,然后保存到暂存区域
- 提交更新,将保存在暂存区域的文件快照永久转储到Git目录中
3. 常用命令
- git show # 显示某次提交的内容 git show $id
- git add # 将工作文件修改提交到本地暂存区
- git rm # 从版本库中删除文件
- git reset # 从暂存区恢复到工作文件
- git reset HEAD^ # 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改
- git diff # 比较当前文件和暂存区文件差异 git diff
- git log -p # 查看每次详细修改内容的diff
- git branch -r # 查看远程分支
- git merge # 将branch分支合并到当前分支
- git stash # 暂存
- git stash pop #恢复最近一次的暂存
- git pull # 抓取远程仓库所有分支更新并合并到本地
- git push origin master # 将本地主分支推到远程主分支
4.提交时发生冲突,你能解释冲突是如何产生的吗?你是如何解决的?
开发过程中,我们都有自己的特性分支,所以冲突发生的并不多,但也碰到过。诸如公共类的公共方法,我和别人同时修改同一个文件,他提交后我再提交就会报冲突的错误。 发生冲突,在IDE里面一般都是对比本地文件和远程分支的文件,然后把远程分支上文件的内容手工修改到本地文件,然后再提交冲突的文件使其保证与远程分支的文件一致,这样才会消除冲突,然后再提交自己修改的部分。特别要注意下,修改本地冲突文件使其与远程仓库的文件保持一致后,需要提交后才能消除冲突,否则无法继续提交。必要时可与同事交流,消除冲突。 发生冲突,也可以使用命令。
- 通过git stash命令,把工作区的修改提交到栈区,目的是保存工作区的修改;
- 通过git pull命令,拉取远程分支上的代码并合并到本地分支,目的是消除冲突;
- 通过git stash pop命令,把保存在栈区的修改部分合并到最新的工作空间中;
5. 如何在Git中创建存储库?
要创建存储库,先为项目创建一个目录(如果该目录不存在),然后运行命令 git init。通过运行此命令,将在项目的目录中创建 .git 目录。
6.git本地仓库和远程仓库的创建和链接
1. 第一种使用方法
1 先创建一个远程仓库(也就是在github上创建一个远程仓库)
2 然后再通过 git clone 远程仓库的地址 克隆到本地
3 将我们写好的项目放到clone下来的文件夹里
4 通过 git add . ( . 点是选中所有的文件,也可以改成某个文件名只提交某一个文件)这是添加到暂时存储
5 通过 git commit -m "(这里边是描述信息)" 推送到本地仓库
6 通过 git push 将我们的项目推送到远程仓库
2. 第二种使用方法3
1 先创建一个远程仓库(也就是在github上创建一个远程仓库)
2 然后在自己电脑上创建一个文件
3 在自己创建的文件里点右键 选中git bash here进入命令行
4 在命令行里输入 git init 创建一个本地仓库
5 再输入 git add . 添加到暂时存储
6 再输入 git commit -m "(这里是描述信息)"推送到本地仓库
7 再输入 git remote add 自定义名 远程仓库地址 绑定本地仓库和远程仓库
8 再输入 git push 自定义名 master 添加到远程仓库
7. 全套学习git示意图
8. Git 是用什么语言编写的?
-
你需要说明使用它的原因,而不仅仅是说出语言的名称。我建议你这样回答:
Git使用 C 语言编写。 GIT 很快,C 语言通过减少运行时的开销来做到这一点。
9. Git的工作区域
-
对于任何一个文件,在 Git 内都只有三种区域:工作区,暂存区和本地仓库。
-
工作区:表示新增或修改了某个文件,但还没有提交保存;
-
暂存区:表示把已新增或修改的文件,放在下次提交时要保存的清单中;
-
本地仓库:文件已经被安全地保存在本地仓库中了。
-
10. git pull 和 git fetch 有什么区别?
git pull
命令从中央存储库中提取特定分支的新更改或提交,并更新本地存储库中的目标分支。
git fetch
也用于相同的目的,但它的工作方式略有不同。当你执行 git fetch
时,它会从所需的分支中提取所有新提交,并将其存储在本地存储库中的新分支中。如果要在目标分支中反映这些更改,必须在git fetch
之后执行git merge
。只有在对目标分支和获取的分支进行合并后才会更新目标分支。为了方便起见,请记住以下等式:<center><h5>git pull = git fetch + git merge</h5></center>
11. git config 的功能是什么?
首先说明为什么我们需要 git config
。
git 使用你的用户名将提交与身份相关联。 git config
命令可用来更改你的 git 配置,包括你的用户名。
下面用一个例子来解释。
假设你要提供用户名和电子邮件 ID 用来将提交与身份相关联,以便你可以知道是谁进行了特定提交。为此,我将使用:
git config –global user.name "Your Name": 此命令将添加用户名。
git config –global user.email "Your E-mail Address": 此命令将添加电子邮件ID。
12 . 如果分支是否已合并为master,你可以通过什么手段知道?
要知道某个分支是否已合并为master,你可以使用以下命令:
git branch –merged
它列出了已合并到当前分支的分支。
git branch –no-merged
它列出了尚未合并的分支。
13. 什么是SubGit?
SubGit 是将 SVN 到 Git迁移的工具。它创建了一个可写的本地或远程 Subversion 存储库的 Git 镜像,并且只要你愿意,可以随意使用 Subversion 和 Git。
这样做有很多优点,比如你可以从 Subversion 快速一次性导入到 Git 或者在 Atlassian Bitbucket Server 中使用SubGit。我们可以用 SubGit 创建现有 Subversion 存储库的双向 Git-SVN 镜像。你可以在方便时 push 到 Git 或提交 Subversion。同步由 SubGit 完成。
14. Git是什么?
-
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
15. 在Git中,你如何还原已经 push 并公开的提交?
有两种方式:
- 删除或修复新提交中的错误文件,并将其推送到远程存储库。这是修复错误的最自然方式。对文件进行必要的修改后,将其提交到我将使用的远程存储库
git commit -m "commit message"
复制代码
-
创建一个新的提交,撤消在错误提交中所做的所有更改。可以使用命令:
git revert <name of bad commit> 复制代码
16. 如何把本地仓库的内容推向一个空的远程仓库?
首先确保本地仓库与远程之间是连同的。如果提交失败,则需要进行下面的命令进行连通:
git remote add origin XXXX
复制代码
注意:XXXX是你的远程仓库地址。 如果是第一次推送,则进行下面命令:
git push -u origin master
复制代码
注意:-u 是指定origin为默认主分支 之后的提交,只需要下面的命令:
git push origin master
复制代码
18.说明GIT合并的两种方法以及区别。
答:Git代码合并有两种:Git Merge 和 Git ReBase
Git Merge:这种合并方式是将两个分支的历史合并到一起,现在的分支不会被更改,它会比对双方不同的文件缓存下来,生成一个commit,去push。
复制代码
Git ReBase:这种合并方法通常被称为“衍合”。他是提交修改历史,比对双方的commit,然后找出不同的去缓存,然后去push,修改commit历史。
复制代码
19.如何查看文件的提交历史和分支的提交历史。
答:使用git log查看文件提交历史
Git log filename
使用git log查看分支提交历史
Git log branch file