Git的基本操作

一、Git的簡介

與SVN不同的是GIT 是一個分布式版本控制系統(tǒng),每個人電腦都有完整的版本庫,假如有人電腦壞了,也不會影響到其他的人工作。代碼一般存儲在一個'中央服務(wù)器',服務(wù)器僅僅提供服務(wù),方便交換大家修改的內(nèi)容。

二、Git的安裝

我這里使用的是Ubuntu的操作系統(tǒng),所以只介紹Ubuntu環(huán)境下的操作使用

  • windows安裝
1、git下載
    - https://git-scm.com/downloads
    - https://pan.baidu.com/s/1kU5OCOB#list/path=%2Fpub%2Fgit
    - 360軟件管家

2、安裝git(不要出現(xiàn)中文路徑和空格)

3、配置環(huán)境變量(我的電腦 — 右鍵屬性 — 高級系統(tǒng)設(shè)置 — 高級 — 環(huán)境變量)
    - git命令是bin目錄下

4、檢測git是否安裝成功
  - cmd 打開命令行
  - 查看git版本
    $ git  - -version 
  - 查看幫助
    $ git help

Mac中直接下載對應(yīng)的xxx.dmg安裝,在終端中使用,使用方式基本操作都是一致的。

  • Linux安裝
- 安裝
  $ sudo apt-get install git

- 檢測是否安裝成功
  $ git --version

三、Git的本地創(chuàng)建

  • 什么是版本庫
    版本庫又被稱為倉庫repository,初期可以理解為一個目錄,這個目錄里面管理的文件都可以被稱為被git管理起來的,每個文件的修改,刪除等的操作git都能進行跟蹤。
  • 設(shè)置Git
$ git config --global user.email '798075744@qq.com'
$ git config --global user.name 'Ail'

這里后續(xù)的代碼都是托管到GitHub中,所以這里我們直接設(shè)置成GitHub的用戶名和GitHub的郵箱

  • 創(chuàng)建版本庫
- 切換到需要添加版本控制的目錄中
  $ cd mygit 
- 初始化本地倉庫
  $ git init

會在對應(yīng)目錄中會看到 .git目錄,就是用來跟蹤管理的版本庫,千萬不要手動修改該目錄的文件。

  • 添加本地git忽略清單 .gitignore (哪些文件是不需要被管理的就添加到忽略清單)
    忽略規(guī)則是一行一個(根目錄和其他目錄,目錄名相同時,即加上對應(yīng)路徑,如果是根目錄則是“/”);

在項目開發(fā)中,有時候想把某些目錄或文件加入忽略規(guī)則中,但在清單中添加之后發(fā)現(xiàn)是無效的。即是某些文件已經(jīng)被納入了版本管理中,則修改. gitignore是無效的。

解決方法:
$ git rm -r --cached .
$ git add .
$ git commit -m '更新gitignore忽略清單'
最好是在項目開始時,創(chuàng)建好. gitignore文件!

四、Git本地倉庫的基本操作

  • 查看本倉庫的變更狀態(tài)
$ git status  // 查看倉庫當前的狀態(tài)

$ git status -s   //   輸出簡要的變更日志

文件狀態(tài)說明:           
' ' 沒有修改
'A' 被添加到本地代碼倉庫   【add】
'C' 沖突                    【clash】
'D' 被刪除               【delete】
'I' 被忽略               【ignore】
'M' 被修改                  【modification】
'R' 被替換               【replace】
'X' 外部定義創(chuàng)建的版本目錄
'?' 文件沒有被添加到本地版本庫內(nèi)
 '!' 文件丟失或者不完整(不是通過git命令刪除的文件)
 '~' 受控文件被其他文件阻隔
  • 添加本地托管(暫存,還未真正的提交到服務(wù)器)
  - 添加指定文件名的文件
    $ git add index.html  
  - 添加通配符匹配的文件
    $ git add *.js
  - 添加所有未托管的文件(忽略.gitignore清單中的列表)
    $ git add .       // 或使用 $ git add - -all

添加本地托管的文件目前還在本地托管,未提交到本地倉庫,更沒有提交服務(wù)器

  • 提交被托管的文件到本地倉庫
$ git commit -m "提交代碼對應(yīng)的版本說明"
// 會自動創(chuàng)建的一個分支master

1、-m后面輸入的是本次提交的說明
2、如果需要再次修改文件,則重復(fù)git add和git commit命令
3、你可以多次add后commit全部提交

  • 對比差異
    對比當前版本和存儲在本地倉庫中最后一個版本的差異
    $ git diff filename  
  • 查看提交日志
  $ git log

  $ git log --pretty=oneline
  • 版本回退
    每當修改一個文件,并且使用commit提交之后,其實就相當于保存了一個快照
// 回退到上一版本
$ git reset --hard HEAD^

// 回退到上上版本
$ git reset --hard HEAD^^

// 回退到上100個版本
$ git reset --hard HEAD~100

// 指定版本回退
$ git reset - -hard xxxxxx    // xxx是對應(yīng)版本的hash值前6位

// 重返未來(從上往下尋找第一個commit的操作,則是未來的最新的版本)
$ git reflog  // 查看歷史執(zhí)行過的git操作
$ git reset --hard xxx // 對應(yīng)的hash值

在git中,用HEAD表示當前版本。git在歷史的版本之間來回切換,使用git reset --hard commit id

  • 撤銷操作
a.修改了文件內(nèi)容,但是還沒有添加到暫存區(qū)
$ git checkout  // 查看可撤銷文件
$ git checkout  --  xxx  // 撤銷對應(yīng)文件,即回到最新版本

五、Git遠程倉庫的操作

接下來我們將我們的文件上傳到GitHub進行托管

  • github創(chuàng)建代碼管理倉庫
    將創(chuàng)建好的倉庫地址進行拷貝(注意HTTPS或SSH方式),這里使用https的方式進行演示。在6、7點將講述兩種上傳的方式。
  • 關(guān)聯(lián)遠程倉庫
- 添加遠程倉庫并起名叫origin
    $ git remote add origin https://github.com/cxy/Git.git

- 查看現(xiàn)有的服務(wù)器列表
    $ git remote -v
  • 刪除遠程倉庫的關(guān)聯(lián)
  // 遠程倉庫的名字
  $ git remote rm origin
  • 推送本地倉庫內(nèi)容到遠程倉庫
  $ git push -u origin master  // 提交到服務(wù)器中的master分支
  • 獲取遠程倉庫內(nèi)容到本地倉庫
    取回遠程倉庫的變化,并與本地分支合并。
$ git pull origin master    // 從master分支中獲取代碼
  • 克隆(下載遠程倉庫)
    從零開發(fā),先有遠程倉庫,之后從遠程倉庫克隆。
// 將遠程服務(wù)器中代碼克隆一份到本地   
  $ git clone https://github.com/userName/projectName test 
  // 沒有指定每次,默認即是倉庫名
  $ git clone https://github.com/userName/projectName

六、HTTPS認證

  • HTTPS方式
- git remote add origin https://github.com/18670775011/BTW.git
- git push -u origin master 或 git pull origin master
【每次操作都需要輸入賬號密碼】

與遠程倉庫交互時,可以是HTTPS和SSH方式兩種,更多建議使用SSH方式,操作更加簡單!

七、SSH認證

  • 創(chuàng)建 .ssh 目錄并進入該目錄
  $ mkdir  ~/.ssh
  $ cd  ~/.ssh
  • 配置全局的name和email(如果已經(jīng)設(shè)置,即忽略該操作,這是用于標示一個人)
$ git config --global user.email '798075744@qq.com'
$ git config --global user.name 'Ail'
  • 生成key
  $ ssh-keygen -t rsa -C '798075744@qq.com'   // 與上面填寫的郵箱與之對應(yīng)
  備注: 連續(xù)三次回車,密碼是設(shè)置為空

公鑰文件生成的路徑會在命令行中顯示,例如:Your public key has been saved in /root/.ssh/id_rsa.pub.

  • 復(fù)制.ssh目錄中的id_rsa.pub文件內(nèi)容,即是key

  • 在github中添加key

  View profile and more -> settings -> SSH and GPG keys -> New SSH key
我的SSH.png

備注:不要最后的郵箱!!

  • 檢測是否添加成功
  $ ssh git@github.com
  提示: Hi xxx! You've successfully authenticated, but GitHub does not provide shell access. 說明設(shè)置成功
  • SSH認證
- git remote add origin git@github.com:18670775011/BTW.git
- git push -u origin master  //上傳

創(chuàng)建的倉庫中,操作可以是HTTPS和SSH的選擇

八、分支管理

開發(fā)中,準備一個新的功能,但需要2周時間才能完成。第一周已經(jīng)寫了50%,如果立即提交,由于代碼沒有寫完,不完整的代碼會導(dǎo)致其他人也不能干活了。如果等代碼全部寫再提交,又會存在丟失每天進度的巨大風險。
有了分支,可以避免此類問題。創(chuàng)建一個屬于自己的分支,別人看不到,還繼續(xù)在原來的分支上正常工作。而我們在自己的分支上干活,想提交就提交,直到開發(fā)完畢后,在一次性合并到原來的分支上。這既安全,又不會影響到別人工作。

  • 特點
    Git分支是與眾不同的,無論創(chuàng)建、切換和刪除分支,Git在非常短的時間呃逆就能完成,無論版本庫是1個文件還是1萬個文件。

  • master主分支
    在版本管理中,每次提交,Git都把他們串成一條時間線(沿著時間軸添加),在Git中這個分支叫主分支,即master分支。
    每次提交,master分支都會向前移動一步,這樣不斷的提交,master分支線也越來越長。

  • Git分支操作(版本庫其實就是一個時間軸)

- 查看分支(當前分支前面會有一個*)
    $ git branch

- 查看分支的日志信息
    $ git branch -v

- 新建分支
    $ git branch version2 // 新的分支version2(主分支是master)

- 切換分支(不同分支中,就會顯示不同分支下的內(nèi)容)
    // 切換分支
    $ git checkout version2
     // 推送分支
    $ git push origin verion2

 - 創(chuàng)建與切換同時進行
    $ git checkout -b version3  // 創(chuàng)建version3分支,并切換到version3

- 合并分支  
    // 假如此時操作的是在version2分支中
    $ git checkout master
    // 再進行合并,即將version2中內(nèi)容合并到master分支中
    $ git merge version2  // 將version2分支的工作成果合并到master分支上
    // 合并完之后,再推送到GitHub
    $ git push origin master

- 刪除分支
    $ git branch -d version2 // 刪除分支version2
  • 分支策略
    master主分支應(yīng)該是非常穩(wěn)定的,一般都是用于發(fā)布新版本,平時此分支上不干活。
    干活都在dev分支上,也就是說dev分支是不穩(wěn)定的,到某個時候,例如1.0版本時,再把dev分支合并到master上,在master分支發(fā)布1.0版本。
    而你和小伙伴每個人都在dev分支上干活,每個人都有自己的分支,時不時的往dev分支上合并即可。


    image.png
  • 多人協(xié)作

- 推送分支
  $ git push origin master
  $ git push origin dev

- 抓取分支
  從遠程庫中clone時,默認只能看到master分支內(nèi)容;
  想要在dev分支上開發(fā),就必須克隆origin的dev分支到本地;
  $ git checkout -b dev origin/dev
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內(nèi)容