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 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