Git 面试查漏

Git——分布式版本控制系统

  • 集中式vs分布式

集中式版本控制系统:版本库是集中存放在中央服务器的,需要联网才能工作

分布式版本控制系统:每个人电脑里都有完整的版本库,不需要联网,不过通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改

  • 创建版本库

版本控制系统只能跟踪以纯文本方式编写的文件的改动,其他二进制文件只能跟踪大小

git init:初始化一个Git仓库

添加文件到Git仓库,分两步:

  • git add——把文件添加到仓库
  • git commit——把文件提交到仓库

 

  • 版本回退

git status:查看仓库当前状态

git diff:查看修改内容

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,可以使用命令git reset --hard HEAD^回到上一个版本,也可以使用命令git reset --hard commit_id回到指定的commit_id版本。

git log:可以查看提交历史

git reflog:查看命令历史的commit_id

工作区:就是你刚刚git init的目录

版本库:工作区里有一个隐藏目录.git

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
git-stage

我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

  • 撤销修改

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就把修改退回到工作区了,回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

  • 删除文件

删除文件:先git rm,再git commit 就ok了
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

  • 添加远程库

要关联一个远程库,在本地git目录使用命令git remote add origin git@server-name:path/repo-name.git;

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master把当前分支master推送到远程;

  • 从远程库克隆

要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。

Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

  • 创建与合并分支

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

解决冲突

先自己开一个feature1分支,然后修改,commit之后git merge,如果有冲突就打开冲突的文件进行修改,修改完成后再add和commit一遍修过的文件,最后删除feature1分支。

  • Bug分支

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

切换bug分支前,当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,用git stash list命令查看暂存的工作现场,再git stash pop,回到工作现场。

  • 多人协作

推送分支:git push origin master

查看远程库信息,使用git remote -v

从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

  • Rebase

rebase操作可以把本地未push的分叉提交历史整理成直线;

rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

  • 创建标签

命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;

命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;

命令git tag可以查看所有标签。

  • 操作标签

命令git push origin <tagname>可以推送一个本地标签;

命令git push origin --tags可以推送全部未推送过的本地标签;

命令git tag -d <tagname>可以删除一个本地标签;

命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章