GIT | GIT常见面试题

GIT | GIT常见面试题GIT 常见面试题 1 列举工作中常用的几个 git 命令 新增文件的命令 gitaddfile 或者 gitadd 提交文件的命令 gitcommit m 或者 gitcommit a 查看工作区状况 gitstatus s 拉取合并远程分支的操作 gitfetch gitmerge 或者 gitpull 查看提交记录命令 gitreflog2 提交时发生冲突 你能解释冲突是

GIT常见面试题

1. 列举工作中常用的几个git命令?
2. 提交时发生冲突,你能解释冲突是如何产生的吗?你是如何解决的?
  • 通过git stash命令,把工作区的修改提交到栈区,目的是保存工作区的修改;
  • 通过git pull命令,拉取远程分支上的代码并合并到本地分支,目的是消除冲突;
  • 通过git stash pop命令,把保存在栈区的修改部分合并到最新的工作空间中;
3. 如果本次提交误操作,如何撤销?

如果想撤销提交到索引区的文件,可以通过git reset HEAD file;如果想撤销提交到本地仓库的文件,可以通过git reset –soft HEAD^n恢复当前分支的版本库至上一次提交的状态,索引区和工作空间不变更;可以通过git reset –mixed HEAD^n恢复当前分支的版本库和索引区至上一次提交的状态,工作区不变更;可以通过git reset –hard HEAD^n恢复当前分支的版本库、索引区和工作空间至上一次提交的状态。

4. 如果我想修改提交的历史信息,应该用什么命令?

如果修改最近一次提交的历史记录,就可以用git commit –amend命令;vim编辑的方式;
如果修改之前提交的历史记录,就需要按照下面的步骤:
第一步:首先查看前三次的提交历史记录:




$ git log -3 commit a762fcafecbd92bbde0e1b0c4b (HEAD -> slave) Author:  <@cnsuning.com> Date: Sat Mar 30 10:58:44 2019 +0800 four commit commit eedbc93d58780f63dd47f8388fe89a Author:  <@cnsuning.com> Date: Thu Mar 28 17:19:52 2019 +0800 third commit third commit commit 0ebae01e5c211d74f6c739 Author:  <@cnsuning.com> Date: Thu Mar 28 16:56:19 2019 +0800 second commit

注意:这里我们想把053961的committer对象信息修改为“second commit second commit”.

第二步:执行命令git rebase –i HEAD~3,会把前3次的提交记录按照倒叙列出来;

pick 0 second commit pick eedbc93 third commit third commit pick a762fca four commit # Rebase c8d7ad7..a762fca onto c8d7ad7 (3 commands) # # Commands: # p, pick <commit> = use commit # r, reword <commit> = use commit, but edit the commit message # e, edit <commit> = use commit, but stop for amending # s, squash <commit> = use commit, but meld into previous commit # f, fixup <commit> = like "squash", but discard this commit's log message # x, exec <command> = run command (the rest of the line) using shell # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop <commit> = remove commit # l, label <label> = label current HEAD with a name # t, reset <label> = reset HEAD to a label # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>] # . create a merge commit using the original merge commit's # . message (or the oneline, if no original merge commit was # . specified). Use -c <commit> to reword the commit message. # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out

这里把第一行的‘pick’修改为‘edit’,然后esc + :wq退出vim编辑器;

$ git rebase -i HEAD~3 Stopped at 0... second commit You can amend the commit now, with git commit --amend Once you are satisfied with your changes, run git rebase --continue

第三步:根据提示,执行git commit –amend命令,进入vim编辑器并修改提交信息。

$ git commit --amend [detached HEAD 20fe643] second commit second commit Date: Thu Mar 28 16:56:19 2019 +0800 1 file changed, 1 insertion(+)

第四步:然后执行git rebase –continue命令

$ git rebase --continue Successfully rebased and updated refs/heads/slave.

查看修改结果

$ git log -3 commit ef990e79fa61295d5c2b64d70017cf412 (HEAD -> slave) Author:  <@cnsuning.com> Date: Sat Mar 30 10:58:44 2019 +0800 four commit commit 79cb4e26dde6352d0f43b65c8ba2 Author:  <@cnsuning.com> Date: Thu Mar 28 17:19:52 2019 +0800 third commit third commit commit 20fe643cbf80cdcc649de8ebf4caf773c7 Author:  <@cnsuning.com> Date: Thu Mar 28 16:56:19 2019 +0800 second commit second commit

修改成功。

5. 你使用过git stash命令吗?你一般什么情况下会使用它?
  • 解决冲突文件时,会先执行git stash,然后解决冲突;
  • 遇到紧急开发任务但目前任务不能提交时,会先执行git stash,然后进行紧急任务的开发,然后通过git stash pop取出栈区的内容继续开发;
  • 切换分支时,当前工作空间内容不能提交时,会先执行git stash再进行分支切换;
6. 如何查看分支提交的历史记录?查看某个文件的历史记录呢?

查看分支的提交历史记录:

  • 命令git log –number:表示查看当前分支前number个详细的提交历史记录;
  • 命令git log –number –pretty=oneline:在上个命令的基础上进行简化,只显示sha-1码和提交信息;
  • 命令git reflog –number: 表示查看所有分支前number个简化的提交历史记录;
  • 命令git reflog –number –pretty=oneline:显示简化的信息历史信息;
    如果要查看某文件的提交历史记录,直接在上面命令后面加上文件名即可。
    注意:如果没有number则显示全部提交次数。




7. 能不能说一下git fetch和git pull命令之间的区别?

简单来说:git fetch branch是把名为branch的远程分支拉取到本地;而git pull branch是在fetch的基础上,把branch分支与当前分支进行merge;因此pull = fetch + merge。

8. 使用过git merge和git rebase吗?它们之间有什么区别?
9. 能说一下git系统中HEAD、工作树和索引之间的区别吗?

HEAD文件包含当前分支的引用(指针);
工作树是把当前分支检出到工作空间后形成的目录树,一般的开发工作都会基于工作树进行;
索引index文件是对工作树进行代码修改后,通过add命令更新索引文件;GIT系统通过索引index文件生成tree对象;




10. 之前项目中是使用的GitFlow工作流程吗?它有什么好处?
  • 4.从develop拉取release分支进行提测 , 提测过程中在release分支上修改BUG
  • 5.release分支上线后 , 合并release分支到develop/master并推送;合并之后,可选删除当前release分支,若不删除,则当前release不可修改。线上有问题也必须从master拉取hotfix分支进行修改;
  • 6.上线之后若发现线上BUG , 从master拉取hotfix进行BUG修改;
  • 7.hotfix通过测试上线后,合并hotfix分支到develop/master并推送;合并之后,可选删除当前hotfix ,若不删除,则当前hotfix不可修改,若补丁未修复,需要从master拉取新的hotfix继续修改;
  • 8.当进行一个feature时 , 若develop分支有变动 , 如其他开发人员完成功能并上线 , 则需要将完成的功能合并到自己分支上,即合并develop到当前feature分支;
  • 9.当进行一个release分支时 , 若develop分支有变动 , 如其他开发人员完成功能并上线 , 则需要将完成的功能合并到自己分支上,即合并develop到当前release分支 (!!! 因为当前release分支通过测试后会发布到线上 , 如果不合并最新的develop分支 , 就会发生丢代码的情况);
    GitFlow的好处
    为不同的分支分配一个明确的角色,并定义分支之间如何交互以及什么时间交互;可以帮助大型项目理清分支之间的关系,简化分支的复杂度。




11. 使用过git cherry-pick,有什么作用?
  • 复制单个提交:git cherry-pick commitId
  • 复制多个提交:git cherry-pick commitId1…commitId3
    注意:复制多个提交的命令不包含commitId1.

12. git跟其他版本控制器有啥区别?
13. 我们在本地工程常会修改一些配置文件,这些文件不需要被提交,而我们又不想每次执行git status时都让这些文件显示出来,我们该如何操作?

首先利用命令touch .gitignore新建文件

$ touch .gitignore

然后往文件中添加需要忽略哪些文件夹下的什么类型的文件

$ vim .gitignore $ cat .gitignore /target/class .settings .imp *.ini

注意:忽略/target/class文件夹下所有后缀名为.settings,.imp的文件,忽略所有后缀名为.ini的文件。

14. 如何把本地仓库的内容推向一个空的远程仓库?

首先确保本地仓库与远程之间是连同的。如果提交失败,则需要进行下面的命令进行连通:

git remote add origin XXXX
git push -u origin master
git push origin master
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/200573.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午10:31
下一篇 2026年3月20日 上午10:32


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号