天天看點

git系統學習

作者:jiajia愛生活

集中式:svn

svn每次存的都是差異,需要的硬碟空間會小一點,可是復原速度會很慢。

優點:代碼存放在單一伺服器上,便于項目管理

缺點:

伺服器當機:員工寫的代碼得不到保障

伺服器故障:整個項目的曆史記錄都會丢失

分布式:git

git每次存的都是項目完整快照,需要的硬碟空間會大一點(git團隊對代碼做了極緻壓縮,最終需要的實際空間比svn多不了太多,可是git的復原速度很快)

優點:完全的分布式

缺點:學習起來比svn難一點

特點:

  • 直接記錄快照,而非差異比較
  • 幾乎所有操作都是本地執行
  • 時刻保持資料完整性
  • 多數操作僅添加資料
  • 檔案的三種狀态(已送出、已修改、已暫存)

安裝:一直next 就ok;

安裝成功 滑鼠右鍵會有 git bash here顯示;

window 清屏是cls,git 清屏是clear;

git --version 手敲到指令面闆,複制不行;

git config 配置使用者資訊:

git config --global user.name  "username"    //引号裡的為個人的使用者名
git config --global user.email  "email"   //引号裡的為個人的郵箱
git config --global -- unset user.name //删除全局配置使用者名
git config --global -- unset user.email //删除全局配置郵箱
git config --list //檢視是否配置成功 最後兩行能看到name和email           

區域:

  • 工作區
  • 暫存區
  • 版本庫

對象:

  • git對象

key:val 組成的鍵值對(key是val對應的hash);

鍵值對在git内部是一個blob類型

  • 樹對象
  • 送出對象
建立檔案: echo 'jiajia' > test.txt   (txt檔案裡寫jiajia文字)
看目前目錄下有哪些檔案: ll
看對應目錄下的檔案和目錄:find ./ (他的上級目錄)
看對象目錄下的檔案:find ./ type f
删除檔案:rm file.txt
檔案重命名:mv file.txt  file666.txt
檢視檔案内容:cat file666.txt
進入檔案内容:vim file666.txt 
   按i鍵 進入編輯模式
   按esc退出編輯,再按冒号進入指令模式
   按wq儲存退出
   按q!強制退出 不儲存
   set nu 設定行号
             
檢視暫存區目前的樣子:git ls-files -s
初始化倉庫:git init
檢視檔案的狀态:git status
檢視哪些修改還沒有暫存:git diff
檢視哪些修改已經被暫存了,還沒送出:git diff --stage
檢視曆史記錄:git log
檢視曆史記錄 一行展示:git log -- pretty=oneline   (簡寫	git log --oneline)
檢視項目的分叉

将修改添加到暫存區:git add ./
将暫存區送出到版本庫:git commit -m '備注資訊'
将暫存區送出到版本庫,跳過add操作(必須是已經送出過的檔案):git commit -a -m '備注資訊'
删除工作目錄中對應的檔案,再将修改添加到暫存區:git rm 檔案名
将工作目錄中的檔案進行重命名,再将修改添加到暫存區:git mv 原檔案名  新檔案名
	
分支:本質就是一個送出對象
head:是一個指針,它預設指向master分支,切換分支時其實就是讓head指向不同的分支
           每次有新的送出時,head都會帶着目前指向的分支一起往前移動
顯示分支清單:git branch
建立分支:git branch 分支名
切換分支:git checkout 分支名
建立并切換到新分支:git checkout -b 分支名
删除空分支,删除已經合并的分支(必須切換到其他分支,再删除):git branch -d 分支名
強制删除分支:git branch -D 分支名
檢視每個分支的最後一次送出:git branch  -v
檢視本地分支與遠端分支的映射關系:git branch -vv
檢視合并到目前分支的分支清單:git branch --merged
檢視沒有合并到目前分支的分支清單:git branch --no--merged
建立分支,并指向對應送出記錄:git branch 新分支名  id
本地分支與遠端分支建立連接配接:git branch --set-upstream-to=origin/master_taiyuan your_branch
(origin/master_taiyuan是你本地分支對應的遠端分支;your_branch是你目前的本地分支)
遠端倉庫已有新分支,需要本地同步更新:git fetch origin(并不會跟蹤,需要建立連接配接)
更新本地倉庫:git remote update  origin  
遠端倉庫已經删除,本地還能看到的清理指令:git remote  prune origin 

*坑:
     在切換分支時,如果目前分支上有未暫存的修改(第一次)或者有未送出的暫存(第一次),
     分支是可以切換成功,但是這種操作可能會污染其他分支

存儲:git stash
檢視存儲清單:git stash list
拿出存儲:git stash apply (不指定 就取最近存的)
拿出指定存儲:git stash apply stash@{2}
删掉存儲:git stash drop stash@{0}
拿到存儲并删掉存儲:git stash pop stash@{0}           

後悔藥

工作區

如何撤回自己在工作目錄中的修改(已跟蹤的,本次沒有add的檔案,撤回)

git checkout -- 檔案名

暫存區

如何撤回自己的暫存(add後的檔案,現在不想送出了)

git reset HEAD 檔案名

版本庫

如何撤回自己的送出(已經commit的檔案撤回)

1、内容有錯,改了重新送出就好,

2、git commit -amend 修改備注資訊

3、git reset --hard 最後一次commit的id(退回到上一次commit狀态,删除add,删除工作空間改動代碼)

git reset --soft HEAD^(撤回commit操作,改動代碼仍然保留)

(HEAD^的意思是上一個版本,也可以寫成HEAD~1,如果你進行了2次commit,想都撤回,可以使用HEAD~2)

本地分支

正常的資料推送和拉取步驟:

1、確定本地分支已經跟蹤了遠端跟蹤分支

2、拉取資料:git pull ,上傳資料:git push

一個本地分支怎麼去跟蹤一個遠端分支:

1、當克隆的時候會自動生成一個master本地分支(已經跟蹤了對應的遠端分支)

2、在建立其他分支時,可以制定想要跟蹤的遠端分支

(a、git checkout -b 本地分支名 遠端分支名

b、git checkout --track 遠端分支名 本地會和遠端同名)

3、将一個已經存在的本地分支改成一個跟蹤分支

git branch -u 遠端分支名

繼續閱讀