当前位置:   article > 正文

真滴泰裤辣!!!!字节跳动最全Git应用及面试问题_git常用命令面试

git常用命令面试


一、Git

1. git常用命令

1.1、git init

初始化一个 Git 仓库,它将创建一个 .git 文件夹,后续的操作记录都会在此文件夹里,相当于 Git 的数据库。

1.2、git remote add origin 远程仓库地址

将本地仓库和远程仓库关联,origin 是远程仓库的名字,是 Git 的默认叫法。关联之后,我们就可以将本地的提交历史推送到远程仓库,完成和其他人的协同工作了。

1.3、git remote -v

查看关联的远程仓库列表,返回远程仓库名和 URL:

$ git remote -v
origin  https://github.com/schacon/ticgit (fetch)
  • 1
  • 2
  • 3

1.4、git status

显示当前工作目录和暂存区的状态,例如创建了一个文件,此时 git status 就会在 Untracked files 里显示该未追踪的文件,如果将该文件 add 了之后,就会在 Changes to be committed 看到,即已经加到缓存区,等待提交。最后,当我们 commit,就会发现没有任何修改和未提交的文件了。

1.5、git add [file] 、git add .

于将已修改或未跟踪的文件添加到暂存区

1.6、git commit -m “提交日志”

将暂存区的文件提交到本地仓库

1.7、git log --oneline

查看提交的日志信息

1.8、git diff

查看工作区的文件和暂存区的不同之处

1.9、git push origin <本地分支名>

将本地的分支推送到 origin 远程仓库的上,第一次推送远程仓库将会在服务器上创建对应的分支,当第一次推送完后,后续可以直接使用 git push 这种简介用法了

1.10、git pull

将远程仓库的最新内容合并到本地仓库里

1.11、git merge <其他分支名>

将其他分支里的提交内容合并到当前分支里

1.12、git merge --abort

合并是有可能有冲突的,如果冲突后想放弃合并,可以使用这个命令

1.13、git branch 分支名称

创建新的分支

1.14、git checkout 分支名称

切换到其他分支上

1.15、git checkout -b 新分支名称

相当于上面连个命令的合体功能,即创建新分支,然后切换到新分支上。

1.16、git branch、git branch -r、git branch -a

分别是查看本地分支、查看远程分支、查看所有分支

1.17、git branch -d 分支名称

删除分支,如果该分支没有合并过,则会提示相应错误,如果想要强制删除,可使用 git branch -D 分支名称。

1.18、git clean -f

删除本地仓库中未跟踪的文件,如果想删除的是目录,使用 -d

1.19、git reset

用于重置暂存区的文件与上一次的提交(commit)保持一致,但不会重置工作区的修改,需使用 git checkout <文件名> 命令才能重置工作区的改动。或者使用比较危险的 git reset --hard HEAD 命令,会将工作区和暂存区都重置到上一次版本,包括 commit 信息。

1.20、git rm 文件、git rm --cached 文件名

如果只是简单的在工作目录里手动删除文件,则还需要自己将修改添加到暂存区,然后再提交到本地仓库里才完成一次改动版本的记录。git rm 文件 则帮我们在删除的同时,也将修改添加到了暂存区,少了一步的操作。

但有时候我们想保留该文件,以便后续使用,但又想把删除的改动添加到暂存区,此时就可以使用 git rm --cached 文件名 命令来达到此效果了。

1.21、git stash 和 git stash pop

如果我们开发到一半,需要重新创建一个新分支去解决线上问题,但此时又不想将当前的分支改动提交到对应分支上,则可以使用 git stash 将修改(包括工作区和暂存区)保存到堆栈中,等新分支处理完毕后,就可以切换到之前的分支,然后使用 git stash pop 恢复缓存的堆栈内容了。

二、常用面试Git问题

1.git提交时发生冲突,你能解释冲突时如何产生的吗?你是如何解决的?

  • 冲突怎么产生的
    开发过程中,我们都有自己的特性分支,所以冲突发生的并不多,但也碰到过。诸如公共类的公共方法,我和别人同时修改同一个文件,他提交后我再提交就会报冲突的错误。

  • 如何解决冲突
    <1>发生冲突,在IDE里面一般都是对比本地文件和远程分支的文件,然后把远程分支上文件的内容手工修改到本地文件,然后再提交冲突的文件使其保证与远程分支的文件一致,这样才会消除冲突,然后再提交自己修改的部分。特别要注意下,修改本地冲突文件使其与远程仓库的文件保持一致后,需要提交后才能消除冲突,否则无法继续提交。必要时可与同事交流,消除冲突。

    <2>发生冲突,也可以使用命令。通过git stash命令,把工作区的修改提交到栈区,目的是保存工作区的修改;通过git pull命令,拉取远程分支上的代码并合并到本地分支,目的是消除冲突;通过git stash pop命令,把保存在栈区的修改部分合并到最新的工作空间中。

2.如果本次提交失误,如何撤销?

  • 如果想撤销提交到索引区的文件,可以通过gitresetHEADfile。如果想撤销提交到本地仓库的文件,可以通过gitreset–softHEAD^n,恢复当前分支的版本库至上一次提交的状态,索引区和工作空间不变更。
  • 通过gitreset–mixedHEAD^n恢复当前分支的版本库和索引区至上一次提交的状态,工作区不变更。
  • 通过gitreset–hardHEAD^n恢复当前分支的版本库、索引区和工作空间至上一次提交的状态。

3.git和svn有什么区别?

  • git是分布式版本控制,svn是集中式版本控制(核心区别)
  • git相对于svn的优势就是不需要网络即可版本控制
  • git把内容按数据方式存储,而svn是按文件
  • git可以是公用的,可以分享,svn基本是公司内部才能访问,网外不方便访问
  • git不依赖中央服务器,即使服务器有问题也不受影响,svn依赖服务器,一旦服务器有问题就会受影响
  • git没有一个全局的版本号,svn有

4.分布式和集中式的区别?

每个节点的地位都是平等,拥有自己的版本库,在没有网络的情况下,对工作空间内代码的修改可以提交到本地仓库,此时的本地仓库相当于集中式的远程仓库,可以基于本地仓库进行提交、撤销等常规操作,从而方便日常开发

5.git fetch、git merge、git pull的区别?

git pull相当于git fetchgit merge,即更新远程仓库的代码到本地仓库,然后将内容合并到当前分支。
git merge:将内容合并到当前分支
git fetch相当于是从远程获取最新版本到本地,不会自动merge 方便记忆.

git pull=git fetch+git merge
  • 1

6. Git的rebase和merge的区别是什么?

git rebasegit merge 两个命令都⽤于从⼀个分⽀获取内容并合并到当前分⽀。

以一个 feature/todo 分⽀合并到 master主分⽀为例,我们来看一下分别⽤ rebasemerge 会有什么不同。

<1>使用 Merge

merge 会⾃动创建⼀个新的 commit, 如果合并时遇到冲突的话,只需要修改后重新 commit。

  • 优点:能记录真实的 commit 情况,包括每个分⽀的详情
  • 缺点:由于每次 merge 会⾃动产⽣⼀个 merge commit

因此在使⽤⼀些可视化的 git 工具时会看到这些自动产生的 commit

这些 commit 对于程序员来说没有什么特别的意义,多了反而会影响阅读.

<2>使用 Rebase

rebase 会合并之前的 commit 历史。

  • 优点:可以得到更简洁的提交历史,去掉了 merge commit
  • 缺点:因为合并而产生的代码问题,就不容易定位,因为会重写提交历史信息

总结

泰裤辣,加油会慢慢一步一步更新哒。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/382667
推荐阅读
相关标签
  

闽ICP备14008679号