天天看點

Git筆記

Git使用說明

git官網:https://git-scm.com/

GitHub:https://github.com/

碼雲:https://gitee.com/

子產品主要分為:基礎,常用操作,分支、回退、常見錯誤。

一:基礎

1.Git 和 SVN的主要差別

  • Git是分布式管理,SVN是集中式管理,
  • Git支援離線操作,SVN僅支援聯網操作

2.Git的基本操作

為了更好的描述和傳達,閱讀前需要進行一些概念的統一

  • repository(倉庫):git中有兩種repository,一個是remote(線上),還有一個是local(本地)。都是存儲project的所有的内容。
  • branch(分支):一個project的鏡像。
Git筆記

3.初次使用:

//一個完整的步驟如下:

  step1:初始化賬号姓名

  git   config   --global user.name "XXX"

  git   config   --global user.email [email protected]

  git   config   --list  //檢視配置資訊

step2:上傳檔案

  cd   /d/workspace      //選擇目錄,進入到d盤workspace下面

  git   init                       //初始化操作,會在/d/workspace目錄下,生成.git檔案夾

  git   remote  add  origin  url     //搭橋,與遠端伺服器建立連接配接

  git   pull  origin  master           //從遠端master分支pull代碼

  git   add  test.txt                      //添加檔案

  git   commit  -m  "第一次送出"        //commit時候的提示資訊

  git   push  origin  master:master     //把暫存區的變換送出到服務端的master分支

step3:同步

  git pull origin master  //從遠端的master分支同步資料

  //用于取回遠端主機某個分支的更新,再與本地的指定分支合并,類似于svn的update操作

二:常用操作

1.push操作:

  git   push   origin   本地分支名          //把本地分支(本地checkout的分支)push到遠端同名分支,如果遠端分支沒有就建立同名分支; //與我目前在那個分支沒有關系

  git   push   origin   本地分支名:遠端分支名     //将指定本地分支push到遠端分支;  //與我目前在那個分支沒有關系   

eg:把本地分支test送出到遠端倉庫master
  git push origin test:master  //與此時在哪個分支沒有關系,可以是目前的分支,也可是别的的分支。      
push操作可能不成功,此時可以強制push:  
      
  原因:可能是因為遠端、本地的檔案不比對導緻的,強制push會覆寫遠端的檔案      
  git push -f origin master //強制push到遠端   參數-f:表示強制推送到遠端。       

 2.pull操作

  git pull origin 遠端分支名          //把遠端分支pull到目前分支(本地checkout的分支)

  git pull origin 遠端分支名:本地分支名      //把遠端分支pull到指定本地分支

 補充:  

  指定了本地分支名,則将遠端分支的資料同步到制定的本地分支;若沒有指定則是同步到目前分支。如果指定的是不存在的分支,則會建立該分支。

git fetch和git pull的差別:
    git fetch:從遠端擷取最新版本到本地,不會自動merge
    git pull:從遠端擷取最新版本并merge到本地,pull=fetch+merge
    
    注:本地看不到遠端的分支,使用git fetch,則可以看到了。
      

  

3. 遠端倉庫

  git remote -v  //檢視遠端分支的倉庫

  git remote rm origin  //删除遠端倉庫

  git remote add origin url  //添加遠端倉庫

4.  撤銷add的到緩存區的檔案

git clean -f  //清除沒add的檔案、檔案夾

git rm --cached fileName:撤銷add到緩存區中的檔案
如需撤銷檔案夾加上-r:git rm -r --cached fileName
 
git diff 檔案名:檢視修改了那些内容
git checkout 檔案名:強制回退到修改之前的内容
      

   

5.狀态查詢:git status

6.檢視日志:

git log  //預設檢視目前分支的日志資訊;  會按送出時間列出所有的更新,最近的更新排在最上面
git log -3  //檢視最近3次的送出日志資訊
git log bug_188  -3   //檢視具體某一個分支的日志資訊
git log --pretty=oneline -3   //顯示最近3條日志,并按行資訊日志資訊      

7.修改内容對比:

  git diff 檔案名:檢視修改了那些内容 

  git比較兩個檔案,修改與本地比較,檢視檔案修改了哪些内容

  git diff branch1 branch2 --stat   

  顯示出所有有差異的檔案清單

  git diff branch1 branch2 檔案名(帶路徑)   

  顯示指定檔案的詳細差異

  git diff branch1 branch2                   

  顯示出所有有差異的檔案的詳細差異

8.commit送出資訊

檢視commit的id 對應修改了哪些檔案:git show commit的id --stat
檢視某次commit修改的内容: git show commit的id 
      

修改commit的送出資訊  

(1)修改最後一個commit的資訊:

  git commit --amend

  如果提示編輯器不存在設定全局配置git的編輯器

  git config --global core.editor vim

在彈出的編輯框中進行修改,之後儲存退出

(2)修改之前commit的資訊:

git rebase --interactive commit的id

該指令會列出目前commit的id之後送出的commit資訊清單

彈出編輯頁面,把commit的id前的 pick 改成 r 儲存,會彈出修改commit資訊的頁面

9.檢視标簽

  git tag -l

三:分支

1.本地分支:

    git branch local_branch : 建立本地分支

    git branch -d local_branch:删除本地分支  //使用大寫的D 強制删除  git branch -D XXX

    git branch -m old_branch new_branch:重命名本地分支

2.遠端分支:

  git push origin dev:dev:建立遠端分支。//将本地分支push到遠端分支,如果遠端分支不存在,則建立遠端分支

  git push origin --delete <branchName> 删除遠端分支

  删除與遠端分支的關系:  git remote rm origin  //删除遠端倉庫,之後可以重新git remote add origin url,重建立立遠端關系

3.檢視分支:

         git branch -a:檢視遠端和本地的分支,綠色代表的是目前的(本地)分支

        git branch:檢視本地的分支,目前分支前面會标一個*号。

        git branch -r:檢視遠端的分支

        git remote show origin 檢視遠端分支

4.git checkout指令:

  檢出,是我們最常用的指令。最常見的場景:建立分支,切換分支。 

         git checkout test:從目前分支切"換到"test"分支

        git checkout -b test:建立test分支,并從目前分支切"換到"test"分支;如果test分支已經存在了,則會報錯

        git checkout -b test666 master:從master分支"切出/建立"一個test666分支,test666這個分支是master分支的孩子

        git checkout -- readme.txt:

      強制回退到修改之前的内容 

      readme.txt檔案在工作區的修改全部撤銷,這裡有兩種情況,add之前和add之後:讓這個檔案回到最近一次git commit或git add時的狀态

5.分支合并

合并某分支到目前分支:git merge <name>

建立dev分支,在該分支下建立檔案,進行操作。操作完成後,在dev分支下進行commit送出,此時master看不到dev分支下的檔案了。是以我們需要将dev分支的内容合并到master上面。
此時我們可以git checkout到master分支,把dev分支的工作成果合并到master分支上。此時master分支就可以看到dev分支送出的檔案了。      
管理者:
    别人将代碼送出到遠端的dev分支,管理者會pull到本地,確定沒問題,再合并到本地的master,最後push到遠端的master分支。      

四.clone克隆

  git clone url:該指令将remote repository下載下傳到local

     預設克隆遠端master分支的資料,并且預設克隆到目前目錄下(pwd指令的結果)

  完整的例子:

    git clone -b 遠端分支名 url 本地目錄    //克隆指定分支的資料,到指定的目錄下 

    git clone -b master http://gitee.com/a/b.git  /d/workspace

  補充:首次使用需要輸入賬密:

      輸入你注冊的賬戶名(或者郵箱)和密碼即可

五:回退reset

步驟:

  git log 檢視目前分支的送出資訊,此時我們可以找到需要回退的commitId

  git reset --hard 3628164 //版本号沒必要寫全,前幾位就可以了,Git會自動去找

疑惑:

Git筆記

reset三種類型:

  1.git reset  --mixed commit的id  
    還原到commit的id,(git reset 預設是mixed )此commit之後的檔案變成modified紅色(即還沒add的狀态)
  2.git reset  --soft commit的id 
    還原到commit的id,此commit之後的檔案變成modified綠色(即add(勾選中)的狀态)
  3.git reset --hard commit的id 
    還原到commit的id,此commit之後的檔案都被還原
      

注:還原的時候,應該提前一個commitId:

Git筆記