圖像具有強大的威力git
那是我在作畢業設計的時候,使用IDEA做爲開發工具,我對系統作了比較大的改動,而後系統又跑不起來了,當時在宿舍寫代碼的我只想扇我本身的臉,我就想到了能不能將系統回退到正常運行的版本呢,可是我又沒有使用版本控制工具,不過還好IDEA自帶了一個文件歷史記錄,我又回退正常版本了。我想這就是版本控制工具的第一個功能吧,版本回退。
除了版本控制以外,Git仍是一個團隊協做工具,什麼意思呢?在企業的開發過程當中,咱們都是不一樣的人開發不一樣的功能,可是這又是一個系統上面的東西,咱們不可能使用U盤這種初級的方式將本身開發完成的功能拷到主系統上去。咱們就可使用Git將開發完成的代碼提交到正在開發的系統中。
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.程序員
Git是一個免費開源的分佈式版本控制系統,被設計用來管理小型到大型的項目。
那可能有人就會問了,那個人代碼提交到哪裏呢? 只存在本地嗎?github
既然是多人協做,咱們就須要指定一臺服務器做爲總倉庫。每一個人將本身所作的提交到這個服務器上,天天從這個服務器上拉取別人的修改。算法
GitHub是一個代碼託管網站。開發者將本身的代碼放到GitHub上。
咱們想象一下,開發團隊不使用版本控制工具或者沒有版本控制工具會怎麼樣呢? bash
一個團隊不一樣的人開發的功能,該怎麼整合在一塊兒呢?好,你經過複製,而後開發人員如何獲取最新的代碼呢? 服務器
假定公司設定了這麼一個崗位專門用來合併代碼,咱們稱之爲代碼合併官吧! 代碼合併官天天早上把最新的代碼經過郵件再發給各個開發者。而後開發者再把用郵件中的最新代碼覆蓋本身的。分佈式
而後某天,CTO(首席技術官)改錯了一個東西,想一想看最新的代碼,而後想看看以前的是什麼樣的。代碼合併官表示,不用擔憂,你發的代碼我都按天建文件夾,稍等一下,我給你找找。工具
上面的場景一想就很恐怖。程序員們不會讓上面的場景出現,由於上面的工做是重複的,要知道複用但是咱們的追求。開發工具
版本控制工具能夠作到,將開發者的代碼聚集在一塊兒,讓開發者天天拉取到最新的代碼。還能夠記錄文件歷史,假如的誤操做,把正確的代碼改爲錯了,你就能夠回退到正常的版本。又好比吧,項目經理決定兵分兩路,一路接着開發新的功能,一路修復bug。你就能夠作一個分支,在一個分支上開發新的功能,在另外一個分支上修復bug。修的差很少了,而後把兩個分支合併在一塊兒。測試
總結一下版本控制工具備啥用:
作分支(branch),分支大致上有下兩個做用:
要想用,你須要首先要下載Git。下載安裝不作介紹。網上有詳細的教程。
在學怎麼用以前,咱們首先介紹Git的一些基礎概念。
在流程圖中已經出現了一些Git的命令:
後文會將對這些命令進行詳細的介紹.
設置郵箱、帳戶名: 範圍: --global use global config file (給整個計算機一次設置,給當前計算機上的全部用戶) --system use system config file (經常使用,給當前用戶一次性設置) --local use repository config file (給當前項目一次性設置) 從範圍上看,global > system > local 可是小範圍的會覆蓋掉大範圍的。
記錄文件的提交歷史,誰提交的,何時提交的。 咱們稱之爲日誌。 注意只有將文件從暫存區推動本地倉庫纔會有日誌。
git config --範圍 user.name '你的用戶名' git config --範圍 user.email '你的郵箱'
例子:
git config --system user.name 'fish' git config --system user.email 'fish@qq.com'
local 範圍 :
在.git 文件夾下的config文件中。
system
進入根目錄下, 打開 git bash here 後, 執行cd ~命令. 下面會有一個.gitconfig 文件。 裏面就記錄了你設置的帳戶和密碼
這裏我新建一個文件叫gitstudy,
git status: 查看工做區 暫存區的狀態
工做區的文件有如下幾種狀態:
unstatge: 未歸入版本控制,處於工做區 statge: 加入版本控制,進入暫存區 commited: 進入本地倉庫
我在gitstudy下新建一個文件,不執行任何指令,那麼該文件就處於unstatge。
例子:
staged: 歸入版本控制 在 git bash here 中執行: git add 文件全名 表明把指定的文件加入版本控制中,也就是放入暫存區。 git add . 表明將全部的untracked的文件都加入暫存區。 平時用git bash here用習慣了,Git還提供了圖形化界面,雖然很簡陋。
執行git add d.txt 將文件推送至暫存區
執行git status 查看工做區、暫存區的狀態
執行git add . 將全部不在暫存區處於工做區的文件推動暫存區
咱們用git status 查看工做區、暫存區的狀態
咱們發現untracked files 就沒有了。
進入暫存區的命令有兩個:
將暫存區的文件推至工做區的命令也有兩個:
將處於暫存區不在本地倉庫的指定文件推動至本地倉庫
將處於暫存區不在本地倉庫的全部文件推動至本地倉庫
最簡單的命令就是: git log
這個命令列出全部的提交記錄。
commit 5663dd0764d5ddd2f645737437f22c447ab772a7
commit 後的字符串是用加密算法(SHA1(不叫sha yi,叫sha one) 算法)產生的,用來標識每一次提交操做。
可能有人要問了,爲何你不用第幾回提交了標識呢?
軟件開發過程當中你們是一塊兒幹活的, 倘若有兩我的的某一次的提交次數是相同的,那遠程倉庫怎麼標識這兩個提交呢.
因此仍是用加密算法產生提交標識更爲穩妥
那可能有人仍是要問了?
我只想看最近幾回。我只想看最近三次該怎麼辦呢? git log -次數: 查看最新的三次提交
git log --graph
不要緊能夠重寫。
git commit --amend -m'註釋信息' 覆蓋最近一次的提交信息
例子:
如何將你的代碼推給別人,或者推到服務器上呢?
你將修改的文件從暫存區推動至本地倉庫。後 git push -u 就能夠了。
你就須要設定推送的目的地。
執行下面的命令:
git remote add origin 遠程倉庫的地址
個人遠程倉庫地址是:
git@github.com:CXK6013/studyGit.git
因此我執行的是:
git remote add origin git@github.com:CXK6013/studyGit.git
origin 後面的就表明目的地,最後一塊確定是項目名.git這種形式
一臺計算機上的文件夾不是什麼都不作就成爲了遠程倉庫。
至於怎麼使一臺計算機上的文件夾成爲遠程倉庫。那是後文討論的問題了。
而後執行 git push 就能夠將工做區的代碼推送到遠程倉庫了。
假如我誤提交了一個文件呢。 不要緊能夠是刪。
刪除的兩種方式:
直接調用操做系統的刪除。
Changes not staged for commit,怎麼理解這句話呢,not staged 沒有暫存。 沒暫存,也就是不在暫存區。還處於工做區。咱們須要將這個刪除命令也進入到暫存區,本地倉庫區.
changes to be commit: 刪除操做沒有到本地倉庫區。
咱們commit一下,這個文件就被刪除了。
Your branch is ahead of 'origin/master' by 1 commit. 這句話是說,我本地的分支不一致。我本地的比較新。
建議我執行git push。
調用git命令進行刪除:
changes to be commited 也就是說命令已經到暫存區,尚未到工做區。
咱們在執行 git commit . -m'刪除本地倉庫的文件'。工做區、暫存區、本地倉庫區就保持一致了。
那假如我誤刪了呢?
關係不是很大,操做系統上有撤銷操做,版本控制工具上也有後悔藥可吃.
那怎麼吃這個後悔藥呢?
reset: 調整; 從新設置; 從新安置; 將…恢復原位.
注意這個恢復原位
執行完 git reset head d.txt
Changes not staged for commit: 說明刪除操做尚未到暫存區。你也能夠認爲是文件從暫存區到工做區了。
而後git認爲你想作如下兩件事情:
(use "git add/rm <file>..." to update what will be committed) 能夠
(use "git checkout -- <file>..." to discard changes in working directory)