Git和Github的基本操做

什麼是GIT?

Git是一個免費、開源的版本控制軟件,目前世界上最早進的分佈式版本控制系統(沒有之一)python

什麼是版本控制系統?

版本控制是一種記錄一個或若干個文件內容變化,以便未來查閱特定版本修訂狀況得系統。git

  • 系統具體功能

    記錄文件的全部歷史變化github

    隨時可恢復到任何一個歷史狀態web

    多人協做開發或修改面試

    錯誤恢復編程

版本控制的工具:安全

  - svn   集中式版本控制系統服務器

  - git  分佈式版本控制系統分佈式

集中式vs分佈式

CVS及SVN都是集中式的版本控制系統,而Git是分佈式版本控制系統,集中式和分佈式版本控制系統有什麼區別呢:svn

集中式版本控制系統,版本庫是集中存放在中央服務器的,而幹活的時候,用的都是本身的電腦,因此要先從中央服務器取得最新的版本,而後開始幹活,幹完活了,再把本身的活推送給中央服務器。

中央服務器就比如是一個圖書館,你要改一本書,必須先從圖書館借出來,而後回到家本身改,改完了,再放回圖書館。

集中式版本控制系統最大的毛病就是必須聯網才能工做。

分佈式版本控制系統根本沒有「中央服務器」,每一個人的電腦上都是一個完整的版本庫,這樣,你工做的時候,就不須要聯網了,由於版本庫就在你本身的電腦上。

既然每一個人電腦上都有一個完整的版本庫,那多我的如何協做呢?比方說你在本身電腦上改了文件A,你的同事也在他的電腦上改了文件A,這時,大家倆之間只需把各自的修改推送給對方,就能夠互相看到對方的修改了。

和集中式版本控制系統相比,分佈式版本控制系統的安全性要高不少,由於每一個人電腦裏都有完整的版本庫,某一我的的電腦壞掉了沒關係,隨便從其餘人那裏複製一個就能夠了。而集中式版本控制系統的中央服務器要是出了問題,全部人都無法幹活了。

在實際使用分佈式版本控制系統的時候,其實不多在兩人之間的電腦上推送版本庫的修改,由於可能大家倆不在一個局域網內,兩臺電腦互相訪問不了,也可能今天你的同事病了,他的電腦壓根沒有開機。

所以,分佈式版本控制系統一般也有一臺充當「中央服務器」的電腦,但這個服務器的做用僅僅是用來方便「交換」你們的修改,沒有它你們也同樣幹活,只是交換修改不方便而已。

Git的優點不單是沒必要聯網這麼簡單,後面咱們還會看到Git極其強大的分支管理,把SVN等遠遠拋在了後面。

 

什麼是Github

Github是全球最大的社交編程及代碼託管網站(https://github.com/)。

Github能夠託管各類git庫,並提供一個web界面(用戶名.github.io/倉庫名)

 Github和Git是什麼關係

Git是版本控制軟件

Github是項目代碼託管的平臺,藉助git來管理項目代碼

使用Git

項目背景:這個創業者想開發選課系統

階段一:順利上線代碼

首先在你建立的項目的文件夾裏面右鍵--->點擊Gir Bash Here---->吧git運行起來。

一、初始化:git   init

git init,初始化,表示即將對當前文件夾進行版本控制

git init

 

二、若是你第一次使用git的時候,須要配置一下。若是你已經配置了,之後就不用配置了

 三、使用git init以後工做區有一個隱藏目錄.git,這個不是工做區,而是git的版本庫。

Git的版本庫裏存了不少東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲咱們自動建立的第一個分支master,以及指向master的一個指針叫HEAD

由於咱們建立Git版本庫時,Git自動爲咱們建立了惟一一個master分支,因此,如今,git commit就是往master分支上提交更改。

你能夠簡單理解爲,須要提交的文件修改統統放到暫存區,而後,一次性提交暫存區的全部修改。

 

第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;

第二步是用git commit提交更改,實際上就是把暫存區的全部內容提交到當前分支。

 四、添加當前的目錄以及全部的子文件到暫存區
  • git add 文件名,將指定文件添加到版本庫的暫存狀態。
      git add .    #全部的文件

     git add README.md  #具體添加的文件

 git status查看當前狀態,紅色表明未跟蹤的文件,綠色表明跟蹤的文件(能夠被版本庫管理)

     查看Git當前狀態,如:那些文件被修改過、那些文件還未提交到版本庫等。

5. 數據提交上線:git commit -m "描述信息"

將暫存區的文件提交到版本庫的分支。

 

六、查看狀態,看那個是否被修改過:git status

必定記得先add,後commit,add以後是沒有放到版本里的,只有commit的時候纔有版本

七、查看有幾個版本:查看版本提交記錄   :git log

查看提交記錄,即:歷史版本記錄

8.修改某一個文件後,提交

9.查看提交後log

十、回滾到上一個版本:git   reset --hard   版本號
 
十一、再跳回去(查看日後的版本號):git reflog 

 Git把管理的文件分爲了兩個區域四個狀態。

add到暫存狀態的時候成綠色了,在commit的時候就沒有了

提供了這個回滾的功能。

十二、撤銷修改:git checkout -- <file>(在add以前撤銷)

1三、撤銷修改:git reset head -- <file>(在add以後撤銷)
 

 

1四、總結:
  • HEAD指向的版本就是當前版本,所以,Git容許咱們在版本的歷史之間穿梭,使用命令git reset --hard commit_id

  • git log能夠查看提交歷史,以便肯定要回退到哪一個版本。

  • git reflog查看命令歷史,以便肯定要回到將來的哪一個版本。

  • git diff HEAD -- readme.txt命令能夠查看工做區和版本庫裏面最新版本的區別
  • 場景1:當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時,用命令git checkout -- file
  • 場景2:當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD <file>,就回到了場景1,第二步按場景1操做。
  • 場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,使用git reset --hard commit_id,不過前提是沒有推送到遠程庫。

階段二:當開發到一半的時候出現bug,修復bug

  - 開發直播功能

當項目開發到一半的時候,就是在此時線上運行平臺出現Bug須要緊急修復,以前的版本出現bug了怎麼辦? 

解決思路:使用分支

 

 默認會有一個master的分支。只作線上的版本,注意不要在master分支上修改,要修改的話就建立一個bug分支

一、建立一個修復bug的分支:git  branch  bug   ,這個bug分支是在master分支上建的,至關於拷貝了一份

二、查看一共有幾個分支 :  git  branch

三、跳轉到bug分支:git  checkout  bug

四、跳轉到master分支:git branch master 

五、建立一個開發新功能的分支:git  branch  dev    #只作開發的版本

如今就有三個分支了,每一個分支都是不同的,bug修復完了,如今就要合併在master上了。

六、master和bug分支合併:git merge  bug  

七、刪除bug分支:git branch -d bug

八、繼續開發,切到dev:git  branch  dev

九、開發完畢,master和dev合併:git merge dev 

切換以前必定記得把你的代碼提交一下

git add . 

git commit -m '修改bug' 

合併的時候可能出現衝突,可能不出現,出現衝突了就得手動解決

@-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
$ git branch bugdev  # 建立分支bugdev

@-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
$ ls
__pycache__/  main.py*  Manager.py*  pickle_util.py*  School.py*  Student.py*  Teacher.py*

@-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
$ git checkout bugdev #切換分支bugdev
Switched to branch 'bugdev'
M       core/main.py

@-PC MINGW64 ~/PycharmProjects/stucourse/core (bugdev)
$ touch b.log  #增長文件

@-PC MINGW64 ~/PycharmProjects/stucourse/core (bugdev)
$ git add . #提交到暫存區

@-PC MINGW64 ~/PycharmProjects/stucourse/core (bugdev)
$ git commit -m 'bugdev' #提交到版本庫,修復bug
[bugdev 7fc00b8] bugdev
 2 files changed, 1 insertion(+), 2 deletions(-)
 create mode 100644 core/b.log

@-PC MINGW64 ~/PycharmProjects/stucourse/core (bugdev)
$ git checkout master #切換到master分支
Switched to branch 'master'

@-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
$ ls
__pycache__/  main.py*  Manager.py*  pickle_util.py*  School.py*  Student.py*  Teacher.py*

@-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
$ git merge bugdev # 合併bugdev分支
Updating 8562916..7fc00b8
Fast-forward
 core/b.log   | 0
 core/main.py | 3 +--
 2 files changed, 1 insertion(+), 2 deletions(-)
 create mode 100644 core/b.log

@-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
$ ls #查看文件內容,多了b.log文件
__pycache__/  b.log  main.py*  Manager.py*  pickle_util.py*  School.py*  Student.py*  Teacher.py*

@-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
$ git branch -d bugdev #刪除bugdev分支
Deleted branch bugdev (was 7fc00b8).

@-PC MINGW64 ~/PycharmProjects/stucourse/core (master)
$ git branch #查看全部分支
  dev
* master
$ git checout dev 繼續開發dev內容

開發完內容以後,在master上合併dev內容
$ git checkout master

$ git merge dev

  

流程圖

branch相關經常使用命令:

git branch 分支名稱             建立分支
git checkout 分支名稱          切換分支
git branch -m 分支名稱        建立並切換到指定分支
git branch                          查看全部分支
git branch -d 分支名稱         刪除分支
git merge 分支名稱              將指定分支合併到當前分支

面試題:當公司代碼出現bug時候怎麼辦?

解答:建立一個bug分支,修復bug後,合併到主分支上,而後刪除bug分支

 

 

擴展:git rebase

合併+將提交記錄合併到一條主線上,提交記錄整潔

 

階段三: 兩個地方辦公

雲端須要一個存放代碼的地方用Github或碼雲等

  公共的

     - Github是用來作代碼託管的

     - 碼雲,作代碼託管

     - csdn code ,作代碼託管

  內部搭建:

     - gitlab

一、登陸Github

在家裏:

就會有這樣一個地址,咱們就能夠用這個地址來提交

git remote add origin https://github.com/XXX/study1.git
#給遠程項目起一個別名origin
 
git push -u origin master
#把本地項目分支提交到GitHub遠程項目

 

在公司: 

家裏:
                    
                    git add .
                    git commit -m 'xx'
                    
                    git remote add origin https://github.com/WuPeiqi/greenlu.git
                    
                    git push origin master 
                    
公司:
                    
                    # 新公司第一次獲取代碼
                        方式一
                        git clone https://github.com/WuPeiqi/greenlu.git
                            
                        方式二
                        git init 
                        git remote add origin https://github.com/WuPeiqi/greenlu.git
                        git pull origin master 直接拿回來
                        
                        
                        方式三
                        git init 
                        git remote add origin https://github.com/WuPeiqi/greenlu.git
                        這的兩句至關於git pull origin master 這一句
                        git fetch origin master  拿到分支上了
                        git merge origin/master  合併在一塊兒
                    
                    # 往後
                        git pull origin master  #
                        
                        或者
                        git fetch origin master 
                        git merge origin/master 
                        
                        
                        
                    #   若是你在本地修改問題,又add,又提交,在線上去拿的時候,或許會衝突

 圖示

特殊場景解決

當你在家的時候吧代碼上線了。到了公司之後吧線上的代碼拉回來。

git pull origin dev開始寫代碼了。寫完以後add commit。。。這時候忘了往github上提交了回到家的時候,那今天寫的代碼沒提交,怎麼辦呢?回公司太晚了,在寫一遍浪費時間,或許你還記着今天寫的代碼,就在這基礎上又開發了,這下提升了警記了,就記得提交了 add 、commit 、git push origin dev次日又到公司了,那昨天的代碼怎麼辦呢、、?是拉下來呢?仍是推上去呢?若是你推上去的話,沒有衝突還好,若是有衝突的話,那你把你的衝突都上線了,不讓你提交,因此咱們要先拉下來先去吧代碼拉下來,git pull origin dev 可能會有衝突,解決衝突。

相關文章
相關標籤/搜索