基礎 | 校招,你必須掌握的Git知識
寫在前面
最近在寫業務需求的時候,總是和導師的代碼發生沖突,自己在處理的時候還是挺耗費時間的。導師一直提醒我更改和添加代碼后要及時提交,但是我總是一股腦寫完一串后才提交,沒有養成良好的提交習慣。在進行協同工作時,導師提問git的使用原理,而我卻只能零星的幾個命令的作用。現在就對常用的git命令的作用和原理進行總結,希望能夠幫助更多人少走彎路,提升開發效率。
1. git下載&配置
工欲善其事,必先利其器。你想要順利的使用git管理代碼,必須先下載和在本地配置好你的git環境。
- 下載git工具,前往git官網自行根據電腦系統選擇對應版本即可。
- 配置和ssh賬戶信息,在命令行輸入配置git賬號信息并可以進行查看。
當然,配置git賬戶信息也分為項目級別和系統級別的,采用就近原則(項目級別優先于系統級別,二者都有時采用項目級別的簽名),如果只有系統級別則以系統級別為準,但是不允許二者都沒有。通常的,設置系統級別賬戶信息即可。
- // 創建系統級別賬戶信息
- $ git config --global user.name "我的姓名"
- $ git config --global user.email "我的郵箱"
- // 查看系統級別賬戶信息
- $ git config --global user.name
- $ git config --global user.email
項目賬戶信息存儲在.git/config文件中,系統賬戶信息存儲在~/.gitconfig中。
- // 創建項目級別賬戶信息
- $ git config user.name "我的姓名"
- $ git config user.email "我的郵箱"
- // 查看項目級別賬戶信息
- $ git config user.name
- $ git config user.email
3.本地生成ssh密鑰,輸入并執行 ssh-keygen -t rsa -C "xxxxx@xxxxx.com",如果執行成功,切換到 ~/.ssh 目錄下輸入命令查看vim ~/.ssh/id_rsa.pub。

當然你也可以使用windows電腦在c盤下進行查找文件:

4.復制公鑰到github、gitlab以及碼云等git倉庫(切記三個平臺可以使用同一個公鑰)


5.查看ssh密鑰是否配置成功
- //碼云
- ssh -T git@gitee.com
- //Hi hanmeimei! You've successfully authenticated, but GITEE.COM does not provide shell access.表示連接成功
- //github
- ssh -T git@github.com
- //Hi hanmeimei! You've successfully authenticated, but GitHub does not provide shell access.表示連接成功。
經歷了以上五步,你就已經順利完成了git環境的配置,可以和git進行愉快地玩耍了。之所以讓你配置那么多,這是因為可以讓你避免使用需要你頻繁輸入賬戶和密碼的https方式。具體的,通過ssh配置git可以通過本地私鑰和遠程倉庫配置的公鑰進行匹配,判讀是否為一對密鑰,可以讓你開發效率得以提升。
前面只是開胃菜,接下來將呈上正菜,硬菜干貨。
二. git簡要概述
一句話概括:git是一個開源的分布式版本控制系統,用于敏捷高效地處理任何項目。
git的特點
git最核心的特點就是分布式,其實就是去中心化,讓它之間的依賴變弱。它是按照元數據方式存儲內容數據,將文件的元信息通過SHA-1哈希算法進行處理隱藏在類似.svn、.cvs等文件中。

git的其它幾個特點是:
- 協同修改,多人并行不悖地修改同一服務器的同一文件。
- 數據備份,不僅保存目錄和文件的當前狀態,還能夠保存每個提交過的歷史狀態。
- 版本管理,在保存每個版本的文件信息時,要做到不重復保存數據,節約存儲空間,提升運行效率。
- 權限控制,對團隊成員進行權限控制,對團隊外開發者的代碼進行審核提交。
- 歷史記錄,查看修改人員、修改時間、修改內容、日志信息等,將本地文件回復到某一個歷史狀態。
- 分支管理, 允許開發團隊在工作過程中多條生產線并行工作,提升工作效率。
git的工作區域和流程
關于git是如何進行工作和代碼管理的,那么我們得先去了解git的工作區域是如何劃分的,這樣我們才能在合適的區域使用合適的命令。
在本地系統中的git劃分為:工作區、暫存區和本地庫(版本庫),它們的大致作用如下:
- 工作區(Workspace):就是本地系統的文件目錄,是當前開發過程中看到的最新代碼
- 暫存區(Index):在執行git add命令后,工作區的文件就臨時存儲在暫存區中,而暫存區就會對當前移入的文件進行標記索引(index),告知那些文件是被git管理的。(在實際開發中,要養成使用git暫存代碼的好習慣,完成某個需求或功能后立刻使用git add 提交到暫存區,防止自己手賤刪除)。
- 本地庫(Respository):本地系統作為本地倉庫存儲著開發項目的歷史版本,在執行git commit命令后便會將提交暫存區的內容到本地倉庫存儲。

本地系統的git工作區域
在上圖所示流程中,我們可以看到本地庫也是棧存儲的,在最后提交的文件會存放在最上面,在進行git回滾的時候取得head文件也是最后一次提交的文件內容。
當然將項目文件只存儲在本地倉庫是沒有任何意義的,我們使用git的目的不就是為了協同開發嘛?那么我們就應該將代碼從本地庫上傳到遠程庫。
- 遠程庫(Remote):就是用來托管代碼的服務器作為遠程倉庫,通過執git push命令將代碼從本地庫同步到遠程庫中,這樣便能實現倉庫內容分布在多個地點多個電腦進行協同操作。

完整的git工作區域
簡而言之,git的工作流程就是:
- 在工作區修改、添加文件
- 將工作區中操作后的代碼通過git add添加到暫存區
- 將暫存區的文件通過git commit提交到本地倉庫
- 將本地庫的修改通過git push推送到遠程庫,方便分布協同工作
三. git常用命令
git的工作就是創建和保存項目的快照以及與之后的快照進行對比,接下來就讓我們上手實踐git常用命令。
創建本地倉庫和鏈接遠程倉庫
- git init:在本項目目錄下創建本地倉庫
- git remote add origin:將本地倉庫與遠程倉庫進行鏈接,origin默認是遠程倉庫的別名url
查詢操作
文檔查詢
- git help (--help):查詢git命令的幫助信息
- git help -a:查詢git命令大綱全部信息列表
- git help:查詢具體命令說明手冊
狀態查詢
- git status:查看本地系統的git狀態
- git reflog:查看git歷史操作記錄信息
- git log:查看git操作日志
文件提交 git commit
- git commit:提交暫存文件到本地庫,會打開編輯器進行編輯。
- git commit -m "filename message":提交暫存文件到本地庫,記錄下提交文件的備注。
- git commit -am:提交暫存文件到本地庫,等價于git add . && git commit -m。
- git commit --amend:提交暫存文件到本地庫,對最近的一次提交信息進行修改,會修改commit的hash值。
拉取文件 git pull
- git pull <遠程主機名> <遠程分支名>:<本地分支名>:從遠程倉庫拉取代碼合并到本地工作區,當然日常拉取可以簡寫為git pull等價于git fetch && git merge。
- git pull --rebase <遠程主機名> <遠程分支名>:<本地分支名>:使用rebase模式進行合并
拉取遠程更改文件 git fetch
git fetch和git pull都是進行遠程文件拉取,區別在于git pull是將指定分支的所有文件合并到本地,而git fetch是將指定分支的更新文件進行拉取,但是不會進行合并
- git fetch <遠程主機名> <遠程分支名>:<本地分支名>:從遠程倉庫拉取指定分支的更新內容到本地指定分支。
- git fetch --all:從遠程倉庫拉取所有分支的更新內容
分支管理
- git branch:查看本地分支
- git branch -r:查看遠程分支
- git branch -a:查看本地和遠程分支
- git checkout <其它分支>:從當前分支切換到其它分支
- git checkout -b <新建分支名>:創建并切換到新建分支
- git branch -d <待刪除的分支名>:刪除指定的本地分支
- git merge <指定分支名>:將當前分支與指定分支進行合并
- git branch -m <舊分支名>:<新分支名>,將舊分支名更改為新分支名
- git branch --merged:查看當前有哪些分支已與當前所處分支合并
- git branch --no-merged:查看當前有哪些分支尚未與當前分支合并
- git branch -v:查看本地的各個分支最后一次提交對象的信息
- git branch -b <本地分支名> <遠程分支名>,拉取遠程分支并創建本地分支
撤銷操作
git checkout --:撤銷工作區的修改操作
git reset HEAD:撤銷暫存區的最后一次提交操作(不會覆蓋工作區)
git reset --(soft|mixed|hard) |<指定commit id>:將當前代碼回滾到指定版本
- --hard指的是回滾全部代碼,包括HEAD、index、工作樹
- --mixed指的是回滾部分代碼,包括HEAD、index
- --soft指的是只回退到HEAD
差異比較
- git diff:用于比較當前工作區和暫存區的文件差異
- git diff --cached:比較暫存區和本地庫最近一次commit提交的內容
- git diff HEAD:比較工作區和本地庫最近一次commit提交的內容
思維導圖

小結
在本篇文章中是筆者在工作實際開發和閱讀文章總結的,可以快速讓你上手git開發,事半功倍,希望對你工作和招聘有所幫助。