git基本入門
2016.11.21
今天是北京的初雪,說實話,作為一個鄭州人從來沒有體會過這麼冷的天,說實話,這個天願意出去陪你吃烤串的不是腦袋有泡就是腦袋有泡...
而我,就願意這樣靜靜的敲程式碼 <( ̄ˇ ̄)/
先給大家分享一個很早之前寫過的git,一字一句純手打!
Git是世界上最先進的分散式版本控制系統!
SVN和Git的區別:
SVN是集中式版本控制系統,版本庫是放在中央伺服器的,而幹活的時候,用的都是自己的電腦,所以首先要從中央伺服器那裡得到最新的版本,然後幹活,幹完活之後,需要把自己做完的活推送到中央伺服器。集中式版本控制系統是必須聯網才能工作,如果在區域網中還可以,頻寬夠大,速度夠快,如果是在網際網路下,如果網速慢的話,就納悶了
Git是分散式版本控制系統,那麼它就沒有中央伺服器,每個人的電腦就是一個完整的版本庫,這樣,工作的時候就不用聯網了,因為版本都是在自己的電腦上,既然每個人的電腦都有一個完整的版本庫,那多個人之間應該如歌協作呢?比如說自己在電腦上改了檔案A,其他人在電腦上也改了檔案A,這時,你們倆之間只需把各自的修改推動給對方,就可以相互看到對方的修改了。
安裝GIt
git --version 檢查版本號 出現版本號證明安裝成功
因為Git是分散式版本控制系統,所以需要填寫使用者名稱和郵箱作為一個標示
注意: git config --global 引數,有了這個引數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然你也可以對某個倉庫指定不同的使用者名稱和郵箱
git config --global user.name "Hello-ZY" 輸入自己github名字
git config --global user.email "dazhangyu147258@gmail.com"自己在github上的郵箱
操作:
一、建立版本庫。
版本庫說白了就是倉庫,可以簡單的理解為一個目錄,這個目錄裡面的所有檔案都可以被Git管理起來,每個檔案的修改,刪除,git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻還可以將檔案還原。
首先在e盤->git下目錄新建一個testgit版本庫
cd E:
cd git
mkdir testgit 建立一個資料夾
cd testgit
pwd 顯示當前的目錄
1.通過命令 git init 把這個目錄變成git可以管理的倉庫
注意:這個時候你當前的testgit目錄下回多了一個.git的目錄,這個目錄是來跟蹤管理板塊的,沒事的時候千萬不要手動亂改這個目錄下面的檔案,否則,會把git倉庫給破壞了
2.把檔案新增到版本庫中
注意:首先要明確,所有的版本控制系統,只能跟蹤文字檔案的改動,像圖片視訊之類的雖然也能由版本控制系統管理,但是沒法跟蹤檔案的變化,中能把二進位制檔案每次改動串起來,也就是說只是知道圖片從1kb變成了2kb,但到底改了什麼,版本控制也不知道,
demo演示:
首先在版本庫testgit目錄下新建一個記事本檔案readme.txt,寫上內容:11111111
第一步:使用 git add readme.txt新增到暫存區裡面去,
第二步:使用 git commit 告訴git,把檔案提交到倉庫 commit(把..交託給..)
現在我們已經提交了一個readme.txt檔案了,我們可以通過命令git status來檢視是否有檔案未提交(這個時候如果出現什麼錯誤提示,最好是從頭再來)
這個時候我可以在文字文件中進行修改,然後在git status 檢視結果
上面的命令告訴我們 zhnagyu.txt檔案已經被修改,但是未被提交的修改
如果想看哪些內容是被修改的要使用 git diff (這個時候比較的都是根據最初的檔案來比較)
知道了對zhangyu.txt檔案做了什麼修改後,我們就可以放心的提交到倉庫了,提交修改和提交檔案是一樣的兩步(第一步是git add,第二步是:git commit)
git commit-m"提交的描述資訊"
如果我們這裡不用-m引數的話,git將調到一個文字編譯器(通常是vim)來讓你輸入提交的描述資訊
二、版本回退:
現在我們已經學會了修改檔案,現在繼續對zhangyu.txt檔案進行修改
如果我想檢視我的歷史修改記錄,用git log
git log命令顯示從最近到最遠的顯示日誌,我們可以看到最近三次提交,如果嫌上面顯示的資訊太多的話,我們可以使用git log --pretty=oneline
說了這麼多,那版本回退到底怎麼做呢,有兩種方法:
a: git reset --hard HEAD^ (這是回退到上個版本,回到上上個是git reset --hard HEAD^^,依次類推)
b:如果想回到前100個版本的話,可以使用簡單命令:git reset --hard HEAD~100
再想檢視zhangyu.txt裡面的內容,通過命令cat 檢視
此時我們仍舊可以檢視歷史資訊
現在我想回退到最新的版本,我們可以通過版本號回退,命令: git reset --hard 版本號
但是現在的問題:假如我已經關掉過一次命令列或者是內容版本號我並不知道,可以通過如下命令獲取到版本號:git reflog
可以看出來最後一個的版本號,那麼現在就可以恢復了 使用命令:git reset --hard ee1fc7f
這個時候我們再檢視當前版本里面的內容 cat zhangyu.txt
三、理解工作區與暫存區的區別。
工作區:就是你在電腦上看到的目錄,比如目錄下testgit裡面的檔案(.git隱藏目錄版本庫除外),或者以後需要再新建的目錄檔案等等都屬於工作區範疇
版本庫:工作區有一個隱藏目錄.git,這個不屬於工作區,這是版本庫。其中版本庫中存了很多東西,其中最重要的就是stage(暫存區),還有Git為我們自動建立了第一個分之master,以及指向master的一個指標HEAD
前面我們說過使用Git提交檔案到版本庫有兩步:
第一步:是使用git add 把檔案新增進去,實際上就是把檔案新增到暫存區
第二步:使用git commit 提交修改,實際上就是把暫存區的所有內容提交到當前分支上
我們在zhangyu.txt再進行修改,接著在目錄下新建一個檔案為test.txt內容為test,線檢視狀態
我們先把兩個檔案都新增到暫存區git add 再檢視狀態
接著我們可以使用git commit一次性提交到分支上
每次提交到分支之後都要檢視一下當前的狀態
四、Git撤銷修改和刪除檔案操作
1、撤銷修改:
比如我現在又進行了檔案修改,先檢視所有內容cat zhangyu.txt,在我未提交之前,我發現有錯誤,所以我得馬上恢復以前的版本,現在我有以下幾種方法可以做修改:
a: 如果我知道我要刪掉的內容,可以手動更改去掉那些檔案,然後add到暫存區,最後commit掉
b:我還可以按照以前的方法直接恢復到上一個版本,git reset --hard HEAD^
但是現在我想換一種方法,我想直接執行撤銷命令,首先,在撤銷之前,我們可以先檢視狀態
可以發現,Git會告訴你,git checkout -- file可以丟棄工作區的修改
撤銷命令就是把檔案在工作區做的修改全部撤銷,這裡有兩種情況
a: 檔案自動修改後,還沒有放到暫存區,使用撤銷修改就會回到和版本庫一模一樣的狀態
b:另外一種就是檔案已經放到暫存區了,接著又做了修改,撤銷修改就回到新增暫存區後的狀態
對於第二種情況,我們繼續來看,假如我現在在zhangyu.txt檔案中新增一行555555555,我add之後
,接著新增內容為6666666,我想通過撤銷命令讓其回到暫存區後的狀態
注意:命令 git checkout -- zhangyu.txt 中的--很重要,如果沒有-- 的話,那麼命令就變成建立分支了
2、刪除檔案
假如我現在版本庫testgit目錄下新增一個檔案a.txt,然後提交
如果我想徹底從版本庫中刪除此檔案的話,可以再執行commit命令提交掉
五、遠端倉庫
在瞭解之前,先要註冊github賬號,由於你的本地Git倉庫和github倉庫之間的傳輸是通過SSH加密的,所以需要一點設定:
第一步:建立SSH Key. 在使用者主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個檔案,如果有的話,直接跳過此如下命令,如果沒有,開啟命令列,輸入命令:
ssh-keygen -t rsa -C "dazhangyu147258@gmail.com"
輸入密碼。再次輸入密碼,然後會生成一個圖
id_rsa是私鑰,不能洩露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
第二步:
通過配置祕鑰輸入ssh-keygen -t rsa -C "dazhangyu147258@gmail.com"
兩次回車 分別出現兩次輸密碼的情況,輸入的時候是不顯示密碼的,兩次輸密碼的情況分別是 是passphrase處和passphrase agin處。
此時在C盤的user中出現一個.ssh資料夾,此檔案中有個.pub檔案 開啟,其中除了最後郵箱部分外,為整個祕鑰地址。
登入github 開啟settings 中的SSH Keys介面,然後點選SSH and GPG keys”再點選New SSH key ,填上任意title,在Key文字框裡黏貼id_rsa.pub檔案的內容。
幾分鐘後繫結的郵箱會收到一個關於key的確認,點選即可
第三步: 連結github網站,輸入 ssh -Tgit@github.com
出現yes/no 輸入yes
然後在rsa之後直接輸入密碼即可,顯示如上,就證明成功 重新整理SSHkeys頁面,key變為綠色,金鑰配置成功!!!
1.如何新增遠端庫
現在我們已經在本地建立了一個Git倉庫,又想在github建立一個Git倉庫,並且希望這兩個倉庫遠端同步,這樣github的倉庫可以作為備份,又可以其他人通過該倉庫來協作
首先,登入github上,然後在右上角找到“create a new repo”建立一個新的倉庫。如下:
目前,在GitHub上的這個testgit倉庫還是空的,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關聯,然後,把本地倉庫的內容推送到GitHub倉庫。
現在,我們根據GitHub的提示,在本地的testgit倉庫下執行命令:
git remote add origin https://github.com/Hello-ZY/testgit.git
把本地庫的內容推送到遠端,使用 git push命令,實際上是把當前分支master推送到遠端。
由於遠端庫是空的,我們第一次推送master分支時,加上了-u引數,Git不但會把本地的master分支內容推送到遠端新的master分支,還會把本地的master分支和遠端的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。推送成功後,可以立即在github頁面中看到遠端庫的內容已經和本地一模一樣了,上面的要輸入github的使用者名稱和密碼:
從現在起,只要本地做了提交,就可以通過如下命令:git push origin master
把本地master分支的最新修改推送到github上了,現在你就擁有了真正的分散式版本庫了。
2.如何從遠端庫克隆?
上面我們瞭解到先有本地庫,再有遠端庫,以及如何關聯遠端庫
現在我們想,假如遠端庫有新的內容了,我想克隆島本地來,該如何克隆呢
首先,登入github,建立一個新的倉庫,名字叫testgit2.如下:
現在,遠端庫已經準備好了,下一步是使用命令git clone克隆一個本地庫了。如下所示:
接著那你的資料夾下就會生成一個testgit2資料夾
六:建立與合併分支。
在 版本回填退裡,你已經知道,每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git裡,這個分支叫主分支,即master分支。HEAD嚴格來說
不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當前分支。
首先,我們來建立dev分支,然後切換到dev分支上
git checkout 命令加上 –b參數列示建立並切換,相當於如下2條命令
git branch dev
git checkout dev
git branch 檢視分支,會列出所有的分支,當前分支前面會新增一個星號。然後我們在dev分支上繼續做demo,比如現在在zhangyu.txt上再增加一行6666666
然後add 和commit
現在dev分支工作已完成,現在我們切換到主分支master上,繼續檢視zhangyu.txt內容
現在我們可以把dev分支上的內容合併到分支master上了,可以在master分支上,使用如下命令 git merge dev
git merge命令用於合併指定分支到當前分支上,合併後,再檢視zhangyu.txt內容,可以看到,和dev分支最新提交的是完全一樣的。
注意到上面的Fast-forward資訊,Git告訴我們,這次合併是“快進模式”,也就是直接把master指向dev的當前提交,所以合併速度非常快。
合併完成後,我們可以接著刪除dev分支了,操作如下:
總結建立與合併分支命令如下:
檢視分支:git branch
建立分支:git branch name
切換分支:git checkout name
建立+切換分支:git checkout –b name
合併某分支到當前分支:git merge name
刪除分支:git branch –d name
1、如何解決衝突?
下面我們還是一步一步來,先新建一個新分支,比如名字叫fenzhi1,在zhangyu.txt新增777777,然後提交
現在我們需要在master分支上來合併fenzhi1
Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容,其中<<>>>>fenzhi1 是指fenzhi1上修改的內容,我們可以修改如下後儲存:
如果我想檢視分支合併的情況的話,需要使用命令 git log.命令列演示如下:
3.分支管理策略。
通常合併分支時,git一般使用”Fast forward”模式,在這種模式下,刪除分支後,會丟掉分支資訊,現在我們來使用帶引數 –no-ff來禁用”Fast forward”模式。首先我們來做demo演示下:
建立一個dev分支。
修改readme.txt內容。
新增到暫存區。
切換回主分支(master)。
合併dev分支,使用命令 git merge –no-ff -m “註釋” dev
檢視歷史記錄
相關文章
- Git基本用法,小白入門Git
- Git入門Git
- Git的入門Git
- **Git新手入門**Git
- nginx 基本入門Nginx
- git簡單入門Git
- Git與GitHub入門Github
- nodejs 入門基本操作NodeJS
- promise入門基本使用Promise
- HBase 基本入門篇
- git 入門教程之個性化 gitGit
- git 入門教程之 git 私服搭建教程Git
- 新手入門 Git 開發Git
- 入門級的Git操作Git
- Git入門與開發Git
- Git 從入門到精通Git
- Git入門-基礎命令Git
- Serverless 基本概念入門Server
- python入門基本知識Python
- Git基本Git
- NodeJs 入門到放棄 — 入門基本介紹(一)NodeJS
- Docker 入門(Mac環境)-part 1 入門基本操作DockerMac
- 通俗易懂的 Git入門Git
- 猴子都能懂的GIT入門Git
- Git 從入門到放棄Git
- git入門學習筆記Git筆記
- git 入門教程之版本控制Git
- git 入門教程之github 教程Github
- PHP入門:常量基本規則PHP
- vuex 基本入門和使用(二)Vue
- git基本使用Git
- Git基本用法Git
- Git基本操作Git
- Git | Git入門,成為專案管理大師(一)Git專案管理
- GIT從入門到入土(IDEA整合)GitIdea
- Git與Github入門實踐(上)Github
- git 入門教程之分支策略Git
- git 入門教程之分支管理Git
- Git與GitHub入門簡明教程Github