真滴泰裤辣!!!!字节跳动最全Git应用及面试问题
文章目录
- 一、Git
- 1. git常用命令
- 1.1、git init
- 1.2、git remote add origin 远程仓库地址
- 1.3、git remote -v
- 1.4、git status
- 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 <本地分支名>
- 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 分支名称
- 1.18、git clean -f
- 1.19、git reset
- 1.20、git rm 文件、git rm --cached 文件名
- 1.21、git stash 和 git stash pop
- 二、常用面试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.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 fetch和git merge,即更新远程仓库的代码到本地仓库,然后将内容合并到当前分支。
git merge:将内容合并到当前分支
git fetch相当于是从远程获取最新版本到本地,不会自动merge 方便记忆.
git pull=git fetch+git merge
6. Git的rebase和merge的区别是什么?
git rebase 和 git merge 两个命令都⽤于从⼀个分⽀获取内容并合并到当前分⽀。
以一个 feature/todo 分⽀合并到 master主分⽀为例,我们来看一下分别⽤ rebase 和 merge 会有什么不同。
<1>使用 Merge
merge 会⾃动创建⼀个新的 commit, 如果合并时遇到冲突的话,只需要修改后重新 commit。
- 优点:能记录真实的
commit情况,包括每个分⽀的详情 - 缺点:由于每次 merge 会⾃动产⽣⼀个
merge commit,
因此在使⽤⼀些可视化的 git 工具时会看到这些自动产生的 commit,
这些 commit 对于程序员来说没有什么特别的意义,多了反而会影响阅读.
<2>使用 Rebase
rebase 会合并之前的 commit 历史。
- 优点:可以得到更简洁的提交历史,去掉了 merge commit
- 缺点:因为合并而产生的代码问题,就不容易定位,因为会重写提交历史信息
总结
泰裤辣,加油会慢慢一步一步更新哒。