天天看點

詳解git使用全過程

ubuntu16.04

系統中登入的賬戶是mi

1.拉取代碼:(git clone下來是masterh主分支的代碼)

git clone **********                    檔案屬于使用者mi
 sudo git clone **********           檔案屬于使用者為root(sudo就是使用了root權限)
 注意:如果使用了sudo 即檔案歸root賬戶的操作權限,但是系統中的帳号是mi ,是以用打開那些克隆下來的檔案隻有隻讀權限不能操作(編輯器和指令視窗都不能修改),是以不使用sudo拉取代碼。ll看一下就知道檔案歸屬資訊
           

2.檢視所有的分支

git branch -a
           

3.檢視目前的分支

git branch
           

建立分支

git branch double     建立double分支
           

切換分支

git checkout double     切換到double分支
           

建立并切換分支

git checkout -b double    上面兩個指令的結合
           

删除分支

git branch -d double    //需要删除的分支不是目前打開的分支
git branch -D double    //強行删除該分支
           

恢複删除的分支

git branch <branch_name> <hash_val>
<hash_val>是git版本管理的散列值
git relflog          //檢視git版本散列值的方法
git branch double HEAD@{13}      //恢複删除分支
           
詳解git使用全過程
用于測試:
git checkout master       切換到master分支
git diff double           比較master分支和double分支的不同(目前在master分支上)
git merge double          将double分支與master分支合并(合并某分支到目前分支)
git branch -d double      合并到了分支,沒用的分支可以删除
git log -p master origin/master  比較本地倉庫和遠端倉庫的差別
           

合并分支

git merge double
           

合并分支發生沖突

git merge --abort    //發現有沖突想取消合并
git commit           //發現有沖突,在本地修改後,使用git commit送出即可
           

4.切換到一個開發分支(本地沒有,因為本地還很幹淨,隻有master分支)

方法一:
 git checkout -b work_base origin/work_bse     作用checkout遠端的work_base分支,在本地起名work_base,并切換到本地的work_base分支
 git checkout -b dev-double-fentan origin/master  //-b後為本地建立的分支,後面為遠端分支
方法二:
  git fetch origin work-base:work-base     //從遠端的origin倉庫的work-base分支下載下傳到本地并建立work-base分支,但不會切換到本地的work-base分支(前面為遠端分支,冒号後面為本地分支)
  git checkout work-base     //切換到work-base分支
           

5.同樣的方法,可以建立其他的分支

6.有了很多分支後,切換分支

git checkout work_base
           

7.本地修改了檔案,還沒有送出,但是還想用線上的

cd 目錄下
git checkout file.php
           

8.更新代碼(從遠端擷取最新代碼到本地)

方法一:git pull  從遠端擷取最新版本并merge到本地   
   git pull origin work-base   (如果本地目前的分支正處于work-base,直接使用git pull)
   注意:如果git pull之前,本地修改了一些檔案,但這些檔案也可以不修改,那就使用先使用git reset --hard 再使用git pull ,這樣本地的修改就沒了

方法二:git fetch  從遠端擷取最新版本到本地,但不會與本地代碼自動merge
   git fetch origin work-base   (如果本地目前的分支正處于work-base,直接使用git fetch)
   git log -p work-base origin/work-base        //比較本地的work-base分支和origin/work-base分支差别
   git merge origin/work-base       合并origin/work-base分支到目前的本地work-base分支
           

git reset 詳解

git reset --soft  //回退後work-base分支修改的代碼被保留并标記為add的狀态
           
git reset --mixed(預設)   //重置索引,但不重置工作樹,更改後的檔案标記為未送出(add)的狀态
           
git reset --hard  //重置索引和工作樹,并且work-base分支修改的所有檔案和中間的送出、沒送出的代碼都被丢棄了
git log    //看到送出的日志
git reset commit号 --hard
           
git reset --merge  //和--hard類似,隻不過如果在執行reset指令之前你有改動一些檔案并且未送出,merge會保留你的這部分修改,hard則不會。
注意:如果你的這些修改add或者commit過,merge和hard都将删除你的送出
           
git reset --keep  //和--hard類似,執行reset之前改動檔案如果是work-base分支修改了的,會提示你修改了相同的檔案,不能合并。如果不是a分支修改的檔案,會移除緩存區。git status還是可以看到保持了這些修改。
           

送出代碼

git pull origin work-base     //送出之前一定要pull一下
git status   //一定要檢視下修改的檔案狀态,看是不是需要送出的
git add .      //有.的話就是全部送出了
git commit -m '海外物流'     //如果沒有寫-m 會進入到vim中,按下ctrl+x就退出了
git push origin  work-base
           

本地誤删檔案

cd   //到目錄下
git reset HEAD UserBehaviorController.php
git checkout UserBehaviorController.php