快速學習Git

一、Git is What?

Git 是分佈式版本控制系統

[下載](https://git-scm.com/download/win)

1、工作原理:

Workspace:工作區

Index / Stage:暫存區

Repository:倉庫區(或本地倉庫)

Remote:遠程倉庫

2、SVN與Git區別

**SVN**是集中式版本控制系統,版本庫是集中放在中央服務器。 幹活的時候,用的都是自己的電腦,所以首先要從中央服務器哪裡得到最新的版本,然後幹活,幹完後,需要把自己做完的活推送到中央服務器。集中式版本控制系統是必須聯網才能工作。

**Git**是分佈式版本控制系統,沒有中央服務器,每個人的電腦就是一個完整的版本庫,這樣,工作的時候就不需要聯網了,因為版本都是在自己的電腦上。既然每個人的電腦都有一個完整的版本庫,那多個人如何協作呢?比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。

二、如何操作詳解

1、創建版本庫

什麼是版本庫?版本庫又名倉庫,英文名repository,可以簡單的理解一個目錄,這個目錄裡面的所有文件都可以被Git管理起來,每個文件的修改,刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻還可以將文件”還原”。

- 新建一個testgit版本庫 - git init 把這個目錄變成git可以管理的倉庫 。這時候你當前testgit目錄下會多了一個.git的目錄,這個目錄是Git來跟蹤管理版本的,沒事千萬不要手動亂改這個目錄裡面的文件,否則,會把git倉庫給破壞了。- 在版本庫裡新建一個文件 readme.txt - git add readme.txt添加到暫存區裡面去- git commit -m "解釋" 告訴Git,把文件提交到倉庫(可以通過命令git status來查看是否還有文件未提交,如下:)- 當修改readme.txt文件,使用 git status 查看狀態,會顯示,文件被修改,但未提交。 - git diff readme.txt 看下readme.txt文件到底改了什麼內容,- 明確了修改了什麼,可以提交,先 git add 文件; 再 git commit -m "解釋"

首先要明確下,所有的版本控制系統,只能跟蹤文本文件的改動,比如txt文件,網頁,所有程序的代碼等,Git也不列外,版本控制系統可以告訴你每次的改動,但是圖片,視頻這些二進制文件,雖能也能由版本控制系統管理,但沒法跟蹤文件的變化,只能把二進制文件每次改動串起來,也就是知道圖片從1kb變成2kb,但是到底改了啥,版本控制也不知道。

2、版本回退

再修改,對文件增加一行內容。

查看歷史:

git log

git log命令顯示從最近到最遠的顯示日誌 。

#### 把當前的版本回退到上一個版本

第一種是:git reset --hard HEAD^ 那麼如果要回退到上上個版本只需把HEAD^ 改成 HEAD^^ 以此類推。

那如果要回退到前100個版本的話,使用上面的方法肯定不方便,我們可以使用下面的簡便命令操作:git reset --hard HEAD~100 即可。

#### 回退到最新的版本

git reset --hard 版本號 ,


但是現在的問題假如我已經關掉過一次命令行或者333內容的版本號我並不知道呢?要如何知道增加3333內容的版本號呢?可以通過如下命令即可獲取到版本號:git reflog 演示如下:

命令

git reset --hard 6fcfc89來恢復

可以看到 目前已經是最新的版本了。

三、 理解工作區與暫存區

**工作區**:就是你在電腦上看到的目錄,比如目錄下testgit裡的文件(.git隱藏目錄版本庫除外)。或者以後需要再新建的目錄文件等等都屬於工作區範疇。

版本庫(Repository):工作區有一個隱藏目錄.git,這個不屬於工作區,這是版本庫。其中版本庫裡面存了很多東西,其中最重要的就是stage(暫存區),還有Git為我們自動創建了第一個分支master,以及指向master的一個指針HEAD。

我們前面說過使用Git提交文件到版本庫有兩步:

第一步:是使用 git add 把文件添加進去,實際上就是把文件添加到暫存區。

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

具體操作:

在readme.txt再添加一行內容為4444444,接著在目錄下新建一個文件為test.txt 內容為test,可以用命令 git status來查看下狀態;

先使用git add 命令把2個文件都添加到暫存區中,再使用git status來查看下狀態,

接著我們可以使用git commit一次性提交到分支上

四、Git撤銷修改和刪除文件操作

1、撤銷修改

比如我現在在readme.txt文件裡面增加一行 內容為555555555555,

在我未提交之前,我發現添加5555555555555內容有誤,所以我得馬上恢復以前的版本,現在我可以有如下幾種方法可以做修改:

第一:如果我知道要刪掉那些內容的話,直接手動更改去掉那些需要的文件,然後add添加到暫存區,最後commit掉。

第二:我可以按以前的方法直接恢復到上一個版本。使用 git reset --hard HEAD^

第三 :

但是現在我不想使用上面的2種方法,我想直接想使用撤銷命令該如何操作呢?首先在做撤銷之前,我們可以先用 git status 查看下當前的狀態。

可以發現,Git會告訴你,git checkout -- file 可以丟棄工作區的修改,如下命令:

git checkout -- readme.txt

命令 git checkout --readme.txt 意思就是,把readme.txt文件在工作區做的修改全部撤銷,這裡有2種情況,如下:

1.readme.txt自動修改後,還沒有放到暫存區,使用 撤銷修改就回到和版本庫一模一樣的狀態。

2.另外一種是readme.txt已經放入暫存區了,接著又作了修改,撤銷修改就回到添加暫存區後的狀態。

添加一條內容為6666

先放到了暫存區中

接著添加內容77777,但沒有添加到暫存區

可以直接使用撤銷命令,git checkout -- readme.txt,把未添加到暫存區的內容撤銷掉

繼續查看下內容,發現77777 已經沒有了。

注意:**命令git checkout -- readme.txt 中的 -- 很重要,如果沒有 -- 的話,那麼命令變成創建分支了**。

2、刪除文件

假如我現在版本庫testgit目錄添加一個文件b.txt,然後提交。

一般情況下,可以直接在文件目錄中把文件刪了,或者使用如上rm命令:rm b.txt ,如果我想徹底從版本庫中刪掉了此文件的話,可以再執行commit命令 提交掉

只要沒有commit之前,如果我想在版本庫中恢復此文件如何操作呢?

可以使用如下命令 git checkout -- b.txt

五、將本地項目上傳GitHub

命令行指令

Git 全局設置

git config --global user.name "xxx"
git config --global user.email "cxxx"

創建新版本庫

git clone git@1xxx/dd.git
cd dd
touch README.md
git add README.md
git commit -m "add README"


git push -u origin master

已存在的文件夾

cd existing_folder
git init
git remote add origin git@10xxxx/dd.git
git add .
git commit -m "Initial commit"
git push -u origin master

已存在的 Git 版本庫

cd existing_repo
git remote rename origin old-origin
git remote add origin git@xxx/dd.git
git push -u origin --all
git push -u origin --tags
…or create a new repository on the command line
echo "# DeepLearning" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/xxx/xxx.git
git push -u origin master
…or push an existing repository from the command line
git remote add origin https://github.com/xxx/xxx.git
git push -u origin master

第一步:我們需要先創建一個本地的版本庫(其實也就是一個文件夾)。也可以右擊打開**Git bash**命令行窗口通過命令來創建

第二步:進入文件夾,通過命令git init把這個文件夾變成Git可管理的倉庫。(發現文件夾裡面多了個.git文件夾)

第三步:把你的項目粘貼到這個本地Git倉庫裡面(粘貼後你可以通過git status來查看你當前的狀態)。然後通過git add把項目添加到倉庫(或git add .把該目錄下的所有文件添加到倉庫,注意點是用空格隔開的)。

第四步:用 git commit把項目提交到倉庫。 -m後面引號裡面是本次提交的註釋內容,

第五步:創建SSH KEY。先看一下你C盤用戶目錄下有沒有.ssh目錄,有的話看下里面有沒有id_rsa和id_rsa.pub這兩個文件,有就跳到下一步,沒有就通過下面命令創建

$ ssh-keygen -t rsa -C "youremail@example.com"

然後一路回車。這時你就會在用戶下的.ssh目錄裡找到id_rsa和id_rsa.pub這兩個文件

第六步:登錄Github,找到右上角的圖標,打開點進裡面的Settings,再選中裡面的SSH and GPG KEYS,點擊右上角的New SSH key,然後Title裡面隨便填,再把剛才id_rsa.pub裡面的內容複製到Title下面的Key內容框裡面,最後點擊Add SSH key,這樣就完成了SSH Key的加密。具體步驟也可看下面:

Settings --> SSH and GPG KEYS --> New SSH key --> Title(裡面隨便填) -->把剛才id_rsa.pub裡面的內容複製到Title下面的Key內容框裡面,最後點擊Add SSH key,

第七步:在Github上創建一個Git倉庫。 New repository

第八步:在Github上創建好Git倉庫之後我們就可以和本地倉庫進行關聯了,根據創建好的Git倉庫頁面的提示,可以在本地TEST倉庫的命令行輸入

git remote add origin https://github.com/g/TEST2.git


(origin後面加的是你Github上創建好的倉庫的地址。)

#若出現 fatal: remote origin already exists.
git remote rm origin

第九步:關聯好之後我們就可以把本地庫的所有內容推送到遠程倉庫(也就是Github)上了,通過:

# 由於新建的遠程倉庫是空的,所以要加上-u這個參數,等遠程倉庫裡面有了內容之後,下次再從**本地庫**上傳內容的時候只需下面這樣就可以了:

git push -u origin master

git push origin master

# 若創建倉庫時,initl 由於你新創建的那個倉庫裡面的README文件不在本地倉庫目錄中,則先將內容合併以下:

git pull --rebase origin master