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>可以刪除一個遠程標籤。

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