**Git相關命令整理**
git config --global user.name //配置姓名
git config --global user.email //配置郵箱
git config --list //查看配置信息
git init //初始化本地倉庫
git status //查看文件狀態
git add 文件名 //添加某個文件到暫存區,如果寫 . 代表當前文件夾下所有的文件、
git commit -m 日誌說明 //提交到本地倉庫
git log //查看提交記錄
git checkout 文件名 //撤銷,讓暫存區文件覆蓋工作區間文件
git rm --cached 文件名 //在暫存區移除相應文件
git reset --hard 提交ID //恢復到指定版本
git branch //查看分支
git branch develop //創建分支
git checkout 分支名 //切換分支
git merge //合併分支
git branch -d 分支名稱 //刪除分支
git clone 地址 //克隆遠程倉庫
git push 地址 分支名 //往服務器推送
git pull 地址 //將服務器代碼拉取到本地
git remote add 名稱 地址 //給地址取別名
git push -u origin master //-u的參數讓git記錄信息,下次只需要 git push 就能進行提交
ssh-keygen //生成一對密鑰
git 是什麼
- git是一個版本管理工具
- git可以幫我們託管代碼,每一次提交信息都會被記錄在git倉庫
- git可以幫我們管理代碼,後續我們都是團隊開發,每一個開發一個功能,通過git可以幫我們把代碼進行整合
環境搭建
git下載 https://git-scm.com/downloads
- 雙擊安裝,選擇默認配置即可
- 安裝完後,右鍵會出現git菜單,選中 Git Bash Here,彈出命令窗口
- 輸入命令 git --version 查看git版本
出現版本信息即安裝成功
Git基本工作流程
git倉庫 | 暫存區 | 工作目錄 |
---|---|---|
用於存放提交記錄 | 臨時存放被修改文件 | 被Git管理的項目目錄 |
- 工作目錄:就是我們編寫代碼的地方
- 暫存區:修改過的文件放在暫存區,方便進行管理
- GIT倉庫:代碼最終提交存放的位置
- 執行流程: 工作目錄中修改的文件 --> 提交到 暫存區 --> GIT倉庫
Git使用前的配置
Git允許多人進行開發,所以我們需要配置用戶名和郵箱,這樣在Git倉庫裏面就能標明代碼是誰進行的提交,方便進行管理
1. 配置提交人姓名:git config --global user.name 提交人姓名
2. 配置提交人姓名:git config --global user.email 提交人郵箱
3. 查看git配置信息:git config --list
通過命令行的形式進行的配置,也可以通過修改配置文件來進行修改,文件名字叫 .gitconfig,位置在 C:\Users\系統用戶名.gitconfig
1. 如果要對配置信息進行修改,重複上述命令即可。
2. 配置只需要執行一次。
Git使用
需要使用到的命令:
1. git init 初始化git倉庫(創建git倉庫)
2. git status 查看文件狀態
3. git add 文件列表 追蹤文件(提交代碼到緩存區)
4. git commit -m 提交信息 向倉庫中提交代碼
5. git log 查看提交記錄
- 初始化Git倉庫
git init(在你需要創建倉庫的文件中使用、右鍵選中 Git Bash Here、中輸入git init創建倉庫)
此時在對應文件夾中會自動創建一個 .git 的隱藏文件夾,裏面放的就是git相關配置信息與git倉庫
- 查看相關狀態
紅色的文件指的是還沒有被操作的文件
此時我們index.html 文件還沒有被git管理,如果需要被管理起來,需要操作下一個步驟
- 添加文件到git中
git add index.html
添加完後,可以查看一下文件狀態
git status
此時文件是添加到了暫存區,還沒有提交到Git倉庫
- 提交到Git倉庫
git commit -m 提交的信息
示例:git commit -m 第一次提交
- 查看提交日誌信息
git log
查看提交後的日誌信息
撤銷(代碼回退)
- 用暫存區中的文件覆蓋工作目錄中的文件
場景:當工作目錄中添加的一些代碼存在一些問題,但是又不記得修改了哪一些地方了,此時就可以用暫存區的文件來覆蓋我們工作目錄的文件
git checkout 文件名
將暫存區正確的代碼覆蓋工作區錯誤的代碼
- 將文件從暫存區中刪除
場景:當我們不小心把其他的一些測試代碼或者是一些沒用的文件添加到了暫存區後,我們可以通過命令進行移除
git rm --cached 文件名
將文件從暫存區中刪除、(在工作目錄中是有的、只是不被git管理)
- 恢復git倉庫中指定版本的項目
場景:一般是用於恢復到某一個正常的版本
git reset --hard 提交ID
指定的更新記錄恢復回來、並恢復暫存區與工作區
Git分支
分支可以認爲就是當前工作目錄中代碼的一份副本。
使用分支,可以讓我們從開發主線上分離出來,以免影響開發主線。
分支細分
- 主分支(master)
第一次向 git 倉庫中提交更新記錄時自動產生的一個分支。這個屬於是主分支,主分支中的代碼是很穩定的代碼,所以我們在開發的時候一般都不會把代碼直接提交到主分支中,主分支中的代碼一般都是用於線上的項目;我們一般在開發的時候,會把代碼先同步到開發分支上,等功能完成並且測試沒有問題了,我們纔會同步到主分支上
開發分支(develop)
- 作爲開發的分支,基於 master 分支創建,這條分支就是用於我們日常開發的分支
功能分支(feature) - 作爲開發具體功能的分支,基於開發分支創建,爲了不影響整體的開發項目,我們在實現某一些有難度的功能時候,會創建功能分支,等到功能實現完畢,沒有問題了我們纔會同步到開發分支上
- 主分支是Git自動幫我們創建的 master,這條分支上的代碼一般用於都是線上的項目
- 開發分支,在主分支上進行創建,一般用於我們開發的時候使用,也需要儘量保證其穩定性
- 功能分支,在開發分支上進行創建,用於實現某一個難度較大功能的時候使用
- 三者的合併流程爲:功能分支 -> 開發分支 -> 主分支
分支相關命令
- 查看分支:git branch
- 創建分支:git branch 分支名稱
- 在哪條分支上輸入的命令,就是在哪條分支上進行的創建
- git branch develop -創建了一個develop的分支
- 切換分支:git checkout 分支名稱
- git checkout develop -切換到develop分支
- 注意:當切換分支的時候,需要把暫存區裏面的文件進行提交,不然會暫存區裏面的文件會跟着到切換的這條分支上
- 當切換會主分支的時候,就看不到其他分支裏面的文件了
- 合併分支:git merge 來源分支
- 如果當前分支的工作已經完成,就可以合併到到其他分支
- 需要分清誰要合併誰,例如我們在開發分支上完成了功能,應該合併到主分支上,所以我們要站在主分支角度來進行合併
- 雖然進行了合併,但是開發分支還是存在
- 刪除分支:git branch -d 分支名稱 (分支被合併後才允許刪除)(-D 強制刪除)
- 分支工作已經完成,就可以進行刪除
- git branch -d develop
- 如果分支沒有進行合併,那麼默認是不能被刪除,這是由於git有分支保護機制
- 如果想強行刪除,把-d 改成-D : git branch -D develop
暫時保存更改
在git中,可以暫時提取分支上所有的改動並存儲,讓開發人員得到一個乾淨的工作副本,臨時轉向其他工作。
應用場景:分支的臨時切換
- 存儲臨時改動: git stash
- 恢復改動: git stash pop
注意:
- 在其他的分支中也能執行恢復改動,但是會把這些文件恢復到當前命令的分支,所以我們在恢復的時候需要注意,我們當時在哪個分支進行的開發
gitHub
GitHub是一個面向開源及私有軟件項目的託管平臺,因爲只支持git 作爲唯一的版本庫格式進行託管,故名GitHub。
GitHub於2008年4月10日正式上線,除了Git代碼倉庫託管及基本的 Web管理界面以外,還提供了訂閱、討論組、文本渲染、在線文件編輯器、協作圖譜(報表)、代碼片段分享(Gist)等功能。目前,其註冊用戶已經超過350萬,託管版本數量也是非常之多,其中不乏知名開源項目 Ruby on Rails、jQuery、python 等。
創建倉庫
註冊好github後、我們來到創建倉庫
填寫倉庫基本信息
將本地倉庫推送到遠程倉庫
1. git remote add 遠程倉庫地址別名 遠程倉庫地址
2. git push -u 遠程倉庫地址或別名 本地分支名稱:
-u 記住推送地址及分支,下次推送只需要輸入git push即可
多人協作開發
在真實的工作中,都是團隊在進行開發項目,一個程序員來負責一個功能模塊,最後整合在一起就是完整項目,所以這裏就需要多人協作開發了,需要一個服務器來管理所有程序員的代碼,每一個程序員把代碼都提交到服務器裏面,這樣,服務器裏面的代碼就是一個完成的項目了
- A在自己的計算機中創建本地倉庫
- A在github中創建遠程倉庫
- A將本地倉庫推送到遠程倉庫
- B克隆遠程倉庫到本地進行開發
- B將本地倉庫中開發的內容推送到遠程倉庫
- A將遠程倉庫中的最新內容拉取到本地
- A在自己的計算機中創建本地倉庫
git init 創建本地倉庫
git add index.html 添加一個文件到暫存區
git commit -m A程序員第一次提交
- A在github中創建遠程倉庫
參考上面 創建倉庫
- A將本地倉庫推送到遠程倉庫
git push https://github.com/自己對應的倉庫鏈接
給遠程倉庫配置別名
git remote add origin https://github.com/自己對應的倉庫鏈接
這句命令就是給我們遠程倉庫的地址配置了別名 叫做 origin
後續我們去推送的時候就可以直接使用別名
git push origin master
如果我們提交的時候攜帶了參數 -u 那麼下次提交的時候就只需要輸入 git push
git push -u origin master
當我們第一次登錄了github,那麼window會默認幫我們保存用戶名跟密碼,保存的位置如下
- B克隆遠程倉庫到本地進行開發
因爲A已經創建了遠程的倉庫,所以程序員B就不需要創建倉庫,直接把遠程的倉庫克隆一份到本地即可
git clone 遠程倉庫地址
- B將本地倉庫中開發的內容推送到遠程倉庫
B程序員此時修改index.html裏面的內容
git add index.html 因爲修改了內容,需要提交到暫存區
git commit -m 程序員B修改了代碼
此時推送到服務器的時候,需要程序員A在github上面添加程序員B
程序員A進入github官網,點擊 settings,點擊Collaborators
點擊 add collaborator 就會被添加進去
把邀請鏈接發送給程序員B,程序員B需要登錄github,然後對鏈接進行訪問
- A將遠程倉庫中的最新內容拉取到本地
拉取利用pull命令,拉取是讀操作,不需要校驗身份
git pull origin master
設置了別名直接使用別名拉取
衝突的解決
多人開發肯定會出現代碼衝突的情況,衝突情況的產生,是多個人同時修改了一個文件,例如,A修改了index.html文件,B也修改了index.html文件;A進行了提交,那麼B就不能提交了
程序員B需要先把服務器的最新代碼拉取到本地,當程序員B 輸入了 pull 命令後,命令行裏面會進行提示
此時文件裏面內容就會發生變化
程序員B就需要去多餘的代碼,然後把裏面的內容改成需要的內容就可以了
git commit -m 日誌
git push origin master
Git高級用法
利用SSH協議去進行提交,可以進行免登錄操作,實現其原理用的是公鑰與私鑰,公鑰跟私鑰是成對呈現,打個比喻:公鑰就是一個門鎖,私鑰就是打開門鎖的鑰匙,公鑰保存在github的賬戶中(遠程服務器中),私鑰保存在客戶端,當客戶端進行push的時候,會攜帶私鑰,遠程服務器就會去比對是否匹配,如果匹配,那麼push成功
公鑰:保存在github賬戶中,也就是在遠程服務器中
私鑰:保存在客戶端
生成密鑰
ssh-keygen 生成的密鑰在C:\Users\當前用戶名稱.ssh 文件夾裏面
在github中添加公鑰
找到 id_rsa.pub文件,這個就是公鑰,複製裏面的內容,到github上,點擊用戶頭像,選擇settings
此時就可以通過github上面ssh的協議地址進行push代碼了
小結
- SSH免密登錄主要用到了公鑰跟私鑰,公對鑰就像門鎖,私鑰就像門鎖對應的鑰匙
- 公鑰放在github遠程服務端
- 私鑰放在本地客戶端
- 利用 ssh-keygen 可以生成一對密鑰,這一對密鑰生成放在 C:\\Users\當前用戶名稱\.ssh 文件夾裏面
- 打開 id_rsa.pub,把裏面的內容進行復制,到github上面進行添加公鑰,把內容複製到裏面即可;公鑰在github上是可以配置多個的,用於多個用戶進行免密登錄
- 在github上把ssh協議地址進行拷貝
- 本地利用push命令進行提交即可,git會默認幫我們攜帶私鑰,在提交的過程中,它會自動去匹配服務器上的公鑰和客戶端的私鑰,如果匹配成功,那麼就能提交,如果失敗,不能提交
Git忽略清單
將不需要被git管理的文件名字添加到此文件中,在執行git命令的時候,git就會忽略這些文件
git忽略清單文件名稱叫: .git ignore(忽略清單文件名)
倉庫的詳細說明
在倉庫根目錄添加一個 readme.md 文件即可,在裏面寫上內容,push到服務器後,默認在github裏面就能看到倉庫的詳細說明了