Git 與 GitHub 入門級
今天我們來搞一下Git
這東西雖然沒啥搞頭兒,但是開發當中還必須得會用,誰讓你我都是苦逼的開發呢~~~~
一、下載與安裝
這玩意簡單,給你賦個圖片,自己研究一下~~~~
1.官網:https://git-scm.com/downloads
2.下載:
3.主要事項:
還有安裝的路徑,盡量都是英文,別整中文
4.安裝完成,需要做進一步的設置
打開這個圖標:
打開後的樣子(版本不一樣,可能有點差別,大同小異)
Git是分布式版本控制系統,所以需要填寫用戶名和郵箱作為一個標識。
命令:
設置用戶名:git config --global user.name "你自己的用戶名"
設 置 郵 箱: git config --global user.email "你自己的郵箱"
驗證是否設置成功
在你的Windows系統中,C:\Users\admin下(大部分是這個路徑),找到 .gitconfig 文件裏可以看到跟你配置的信息一致,說明設置成功
二、實操
1.創建版本庫
首先在你的任意盤符下,執行以下操作,我的習慣是在某個盤下建個文件夾來當做git的版本庫(暫時就是一個文件夾,還不是版本庫,這點要明確)
比如:我在 G:\JavaInstall 下建個文件夾叫gitHome
那麽就在gitHome 文件夾的裏面 一定是裏面 ,點擊鼠標右鍵,找到 Git Bash 打開,出現如圖:
這個其實就是用git的窗口打開的這個文件,主要這個路徑,用於創建版本庫
- 下面開始創建版本庫
命令 : git init
此時可以看到 在你的gitHome 文件夾下出現個 .git (若沒有顯示,則去開啟隱藏文件)
所以此時,你的 .git 就是你的本地庫
- 打開.git 會出現以下文件,我來做下詳解
2.文件新建+狀態查看+新增+提交+新增文件內容
① 查看本地版本庫的各個文件的狀態 : git status
例子:是用 touch 命令新建一個 a.txt文件,但此時要明確,a.txt文件還不屬於git版本庫,必須加入到git版本庫才行
重要的一點,此時執行了git add a.txt之後,雖然應加入到了git的版本庫,但是此時只是加入到了git的臨時
執行 git commit a.txt 出現以下信息
表示此時你需要鍵入你改變的信息,否則‘#‘部分將會被忽略,並且將會提交一個空文件
意思就是 你需要再寫一遍 你要提交的文件,那太麻煩了,於是 q! 命令,不保存退出使用另一種方法:
命令: git commit -m "create file" a.txtOK,完成以上的步驟,才算真正的將a.txt 文件納入git管理;
② 修改剛才的a.txt文件,會發現git的不同之處
命令:vim a.txt 增加幾條數據
【註】:在git更新一個文件時,原本已經將a.txt文件納入到管理中了,修改該文件後,還需要再納入一遍,它不會將原有已經在版本庫中的文件直接保存
命令依次:git add a.txt
git commit -m "update file" a.txt
git status
3.日誌+版本號+對比不同
3.1查看日誌:
① git log a.txt
② git log --pretty=oneline a.txt
這兩種查看git日誌的方式
第一個顯示信息比較全,作者啊,時間啊,以及對文件是create 還是 update啊,都顯示的清晰,但是往往格式太占用屏幕,顯示不全
第二種,顯示的就是具體做個啥操作,一行顯示完全,不去關心誰創建的,誰修改的等信息
3.2 版本號
在執行更新操作的時候,盡量加個版本號:
如:git commit -m "update file 01" a.txt
這個 "01" 就是版本號,每次對該文件進行更新操作時,盡量給個版本,方便以後查找對比
3.3 對比不同
命令:git diff a.txt
4. 版本回退+版本穿梭+版本撤銷
4.1 版本回退
命令:git reset --hard HEAD^ 【註】:HEAD是個指針,^:表示回退一步
4.2 版本穿梭
① 命令: git reflog a.txt 查看所有日誌記錄的指針
② 根據上一步的指針,選擇要回退到哪一個位置
以上是回退一步,或者回到指定的步驟
那麽當要回退到很多步呢?
使用命令:git reset --hard HEAD~4 :表示回退4步
4.3 版本撤銷
命令:git checkout -- a.txt
小總結:
1.庫,首先得是個git庫 git init
2.得有個東西管理,新建個文件 touch a.txt
之後,向裏面填東西,首次的話叫納入git管理 git add a.txt
3.git commit -m "create file" a.txt 提交到自己的本地庫
4.git log 查看git的各種日誌
5.git status 查看當前版本庫的狀態
6. git commit 相當於往前走,那麽 就有往後退 git reset --hard HEAD^ 表示往後退一步
其中,一個 ^ 表示退一步,多個 ^ 表示退多步
7.版本穿梭 用git reflog a.txt 查出他的全部指針版本號
再結合 "git reset --hard 7位版本號" 穿梭到想要的版本
8.撤銷 使用 "git checkout -- 文件名"
5. 理解工作區+版本庫+暫存區
5.1 工作區
工作區(Working Directory):就是你電腦本地硬盤目錄
5.2 版本區
版本庫(Repository):工作區有個隱藏目錄.git,它就是Git的本地版本庫
5.3 暫存區
暫存區(stage):一般存放在"git目錄"下的index文件(.git/index)中,所以我們把暫存區有時也叫作索引(index)。
當在工作區時 撤銷要用 "git checkout -- a.txt"
當在暫存區時 撤銷要用 "git reset HEAD a.txt" 再 "git checkout -- a.txt"
當在版本區時 撤銷要用 "git reset -hard HEAD^"
Git為我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD。
我們把文件往Git版本庫裏添加的時候,是分兩步執行的:
第一步是用“git add”把文件納入Git管理,實際是把本地文件修改添加到暫存區;
第二步是用“git commit”提交更改,實際上就是把暫存區的所有內容提交到當前分支 。
因為我們創建Git版本庫時,Git自動為我們創建了唯一一個master分支,所以commit就是往master分支上提交更改。
可以簡單理解為,需要提交的文件修改通通放到暫存區,然後,一次性提交暫存區的所有修改。一旦提交完後,如果你又沒有對工作區做任何修改,那麽工作區就是“幹凈”的。即:nothing to commit (working directory clean)。
用“git diff HEAD -- filename”命令可以查看工作區和暫存區裏面最新版本的區別。
新建過撤銷未add: git checkout -- 文件名
撤銷已add未commit:先git reset HEAD 文件名 再 git checkout -- 文件名
撤銷已add已commit: git reset –hard HEAD^
所以,一定要明確,當前所操作的文件是在git的哪一個區,才能保證執行前進和回退的正確性
5.4 刪除命令
① git rm a.txt
② git commit -m "delete a.txt" a.txt
即 在git中刪除要執行兩步操作,雖然刪了,但是還得提交一下
5.5 分支(查看+新建+切換+合並(分支名)+刪除)
- 5.5.1 查看分支
- 命令:git branch
- 命令:git branch
- 5.5.2 新建分支
- 命令:git branch 分支名
- 5.5.3 切換分支
- ① 命令: git checkout 分支名
- ② 命令:git branch -b 分支名 :表示把分支和切換用一個命令完成
而且,子分支會把master(主分支)裏的內容,copy出同樣的一份到自己的分支裏,目的就是盡量不要在主分支中去操作
- 5.5.4 合並分支
- 命令:git merge 分支名
- 5.5.5 刪除分支
- 命令 git branch -d 分支名
【註】:要保證子線跟主線的內容一致,所以每次合並完之後,刪除子線,然後再新建個子線,把內容和主線永遠保持一致
5.6 版本沖突
子分支 在a.txt文件內增加數據
- 主分支 在a.txt同一個位置增加不同的數據
合並 發現存在沖突
查看沖突 ,進行人工幹預,將沖突的符號刪除
- 刪除後的效果 (千萬別把隊友提交的數據刪除了)
加入版本庫 然後提交
這樣沖突就解決了,就是手動把沖突刪掉
三、GitHub 使用 與 git 協同辦公
github是一個git項目托管網站,主要提供基於git的版本托管服務
github是一個基於git的代碼托管平臺, Git 並不像 SVN 那樣有個中心服務器。目前我們使用到的 Git 命令都是在本地執行,如果你想通過 Git 分享你的代碼或者與其他開發人員合作。 你就需要將數據放到一臺其他開發人員能夠連接的服務器上
1.GitHub的應用:
第一步 註冊+檢查.ssh秘鑰:由於你的本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的,所以我們需要配置驗證信息(No such file or directory表示第一次)
第二步 創建SSH Key: ssh-keygen -t rsa -C [email protected]成功的話會在~/下生成.ssh文件夾,進去,打開id_rsa.pub,復制裏面的key。
第三步 粘貼id_rsa.pub 的內容到 GitHub,註意粘貼的內容一定要恰好,不要多一個空格或者少一個空格
操作依次為:登錄GitHub → 頭像位置找到settings → 選擇左側菜單的 SSH and GPG keys → 左上角 New SSH key → 起個名 粘貼公鑰
第四步 測試連通性: ssh -T [email protected]
表示連接成功了,此時再回到你的 .ssh 文件 ,會多了一個名字為 known_hosts文件
第五步 本地 → github遠程庫
現在的情景是,我在本地創建了一個OA項目後,我又想在GitHub創建一個OA項目,並且讓這兩個倉庫進行遠程同步
5.1 先在本地新建好一個git項目
5.2 到Github上新建一個同名的空項目 (是同名 我這裏後來又建了一個,忘記修改,都默認oa.txt即可)
5.3 本地和github上的倉庫進行關聯
命令:git remote add origin https://github.com/zzyybs/oa.git
5.4 把本地庫的內容推送到遠程git push命令,實際上是把當前分支master推送到遠程
命令:git push -u origin master
命令:git pull origin master : 是從遠程庫的master 下載到 本地庫的 master
由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。
第六步 github遠程庫 → 本地
現在的情景是,我們從零開發,那麽最好的方式是先創建遠程庫,然後從遠程庫克隆
6.1 登陸GitHub,創建一個新的倉庫,名字叫OA2
6.2 遠程庫OK,下一步是用命令git clone克隆一個本地庫
Git clone [email protected]:xxx/oa2.git
7.遠程交互模型 -- 上
7.Git交互模型-下
一般工作流程如下:
1 克隆 Git 資源作為工作目錄。
2 在克隆的資源上添加或修改文件。
3 如果其他人修改了,你可以更新資源。
4 在提交前查看修改。
5 提交修改。
6 在修改完成後,如果發現錯誤,可以撤回提交並再次修改並提交。
8.Fork
現在的情景是,用叉子把別人的東西(copy no cut)叉到你碗裏~
就是把別人的項目clone一份,但是owner變成自己,這樣你就可以在遵守Open source license的前提下任意修改這個項目了。
相當於你在原項目的主分支上又建立了一個分支,你可以在該分支上任意修改,如果想將你的修改合並到原項目中時,可以pull
request,這樣原項目的作者就可以將你修改的東西合並到原項目的主分支上去,這樣你就為開源項目貢獻了代碼,開源項目就
會在大家共同的努力下不斷壯大和完善。
9.解決Git push時重復輸入用戶名密碼
C:\Users\admin目錄下新建名字為_netrc的文件並編輯該文件寫如下內容:
machine github.com
login 你的用戶名
password 你的密碼
比如:
machine github.com
login li4
password 123
10.Git 常用命令小總結
mkdir: XX (創建一個空目錄 XX指目錄名)
pwd: 顯示當前目錄的路徑。
git init 把當前的目錄變成可以管理的git倉庫,生成隱藏.git文件。
touch xx文件或者新建文件
git add XX 把xx文件添加到暫存區去。
git commit –m “XX” 提交文件 –m 後面的是註釋。
git status 查看倉庫狀態
git diff XX 查看XX文件修改了那些內容
git log 查看歷史記錄
git reset --hard HEAD^
cat XX 查看XX文件內容
git reflog 查看歷史記錄的版本號id
git checkout -- XX 把XX文件在工作區的修改全部撤銷。
git rm XX 刪除XX文件
git remote add origin https://github.com/zzyybs/testgit 關聯一個遠程庫
git push –u(第一次要用-u 以後不需要) origin master 把當前master分支推送到遠程庫
git clone https://github.com/arjrzhouyang/testgit 從遠程庫中克隆
git checkout –b dev 創建dev分支 並切換到dev分支上
git branch 查看當前所有的分支
git checkout master 切換回master分支
git merge dev 在當前的分支上合並dev分支
git branch –d dev 刪除dev分支
git branch name 創建分支
git remote 查看遠程庫的信息
git remote –v 查看遠程庫的詳細信息
git push origin master Git會把master分支推送到遠程庫對應的遠程分支上
常用基本操作命令25個左右
Git 與 GitHub 入門級