git使用

https://git-scm.com/book/zh/v2

 

三種狀態

好,請注意。 如果你希望後面的學習更順利,記住下面這些關於 Git 的概念。 Git 有三種狀態,你的文件可能處於其中之一:已提交(committed)、已修改(modified)和已暫存(staged)。 已提交表示數據已經安全的保存在本地數據庫中。 已修改表示修改了文件,但還沒保存到數據庫中。 已暫存表示對一個已修改文件的當前版本做了標記,使之包含在下次提交的快照中。

由此引入 Git 項目的三個工作區域的概念:Git 倉庫、工作目錄以及暫存區域。

 

 

git初始化

安裝-----Google it

 

爲每一臺電腦配置身份信息

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
把某個目錄變成可以讓git管理到的目錄(創建版本庫)
git init
git基本命令
#把內容輸入到一個文件
echo "xxxx" > xxxx
#把工作空間的某個文件添加到cache
git add xxxx
#把工作空間的所有內容添加到cache
git add -A
#把cache當中的某個文件提交到本地庫
git commit -m "xxxx"
#all
git commit -am "xxxx"
#cache ---->work file恢復一個文件 file1 file2 恢復兩個文件  .恢復所有文件
git checkout readme.txt
#git狀態查詢
git status
#查看不同的地方 默認查看工作區和cache
#git diff --cached 比較cache和Repository
#git diff HEAD 工作區和最新的Resository
#git diff commit-id 工作區和制定的repository
#git diff --cached commit-id
#git diff --commit-id commit-id
git diff
#reset 顧名思義 (HEAD~100)
git reset HEAD^
#git的日誌
git log git log --pretty=oneline
#oh my pretty pretty boy i love you
git reflog 查看歷史命令
#git rm --cached file_path
git rm
git mv
#遠程倉庫的克隆島本地庫
git clone
#關聯遠程倉庫
git remote add
#推送到遠程倉庫
git push
#拉取遠程倉庫的內容
git pull
#查看當前分支 -a查看所有分支 -av 查看所有分支的信息 -avv 查看所有分支的信息和關係
git branch
#創建一個分支 基於當前分支創建分支
git branch xxx
#基於oldType創建分支
git branch newBranch oldType
#切換分支
git checkout 分支的名字
#刪除分支
git branch -d xxx
#查看文件內容
git cat-file -p commitid
#查看對象類型 blob commit tree
git cat-file -t commitid
 

 

github
  1. $ ssh-keygen -t rsa -C "email" //public key for push
  1.  git remote add nickName gitUrl // conn remote
  1. git push -u remoteBranch localBranch
分支

查看分支

 

創建分支

 

基於當前分支創積分分支
基於遠程分支創建分支
基於新分支創建分支
基於提交創建分支
 
其實都是基於commit創建分支

 

合併分支

一定要切換到被合併的分支上去合併

比如說A要合併A1

那麼先要切換到A1,然後在A1上面執行merge

 

 

git原理

find .get/objects -type f 查詢object是下面所有的文件

git hash-object -w xxx 放到git數據庫並且返回hash值 add操作?

 

git 對象

  1. Blob 對象
存儲的是文件內容,壓縮的
文件名字是根據內容算出的一個hash值
  1. tree對象
blob對象
子tree對象
  1. commit對象
作者提交者註釋
指向一個 tree 的指針

首次提交,提交一個簡單的文件 a.txt ,commit 之後的圖如下

如圖所示,生成了 3 個對象,一個 commit 對象,一個 tree 對象,一個 blob 對象。圖上藍底是 commit 對象,灰底的是 tree 對象,白底的是 blob 對象,每個對象節點的標題是對象的 key (SHA 摘要)縮略表示。 對於 commit 對象,tree 內容表示這個 commit 對應根目錄的 tree 對象,parent 表示父 commit 節點,通常commit 只有一個父節點,也可能沒有(首次提交時 parent 爲空),也可能有多個(合併節點),commit 對象還保存了 commit message 等信息。 對於 tree 對象,裏面的內容包含了文件名,文件對應的 blob 對象的 key,或者是目錄名和目錄對應 tree 對象的 key。 對於 blob 對象,表示一個實際文件對象的內容,但不包括文件名,文件名是在 tree 對象裏存的。

 

通過 git log 命令獲取最新 commit 的 key

通過 git cat-file -p <object key> 獲取 key 對應 object 的內容,根據 object 裏的內容,繼續探索,就可以訪問到所有關聯 object.

 

 

 

 

HEAD 爲什麼要通過 refs/heads/master 中轉一下,而不是直接指向 master 分支的提交?

每個分支的頭指針都指向該分支的最新提交
但是此時出現一個 dev 分支,剛從 master 檢出,頭指針和 master 相同,HEAD直接指向提交的話,怎麼知道,當前工作分支是 master 還是 dev 呢?

 

 

 

HEAD 可以直接指向提交嗎?

 

但是會進入一種特殊的狀態 detached HEAD。
detached HEAD,遊離的 HEAD 指針。
使用 git checkout <commit id> 成功的進入了
detached HEAD 狀態:
 
得出結論,當 HEAD 指針直接指向提交時,就會導致 detached HEAD 狀態。在這個狀態下,如果創建了新提交,新提交不屬於任何分支。相對應的,現存的所有分支也不會受 detached HEAD 狀態提交的影響
example:
排查問題的時候,checkout 到懷疑的 commit 點上去做些測試,detached HEAD會保護你的現有分支不受影響,測試完了不想保存直接 checkout 到其他地方,可以放棄修改。想保存修改,可以創建一個 git checkout -b <new-branch-name> 新分支保存
 

 

分支指針切換

 

 

遠程倉庫

基於文件共享(nfs)

linux ssh

裝好git yum install git

git地址:username@ip:/dir

密碼

 

gitlab

https://about.gitlab.com/installation/#centos-7

傳上去

gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm

安裝 rpm -ivh /home/tools/gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm

 

sudo gitlab-ctl reconfigure 時間很少8-10分鐘

 

 gitlab-ctl start 啓動gitlab

 

訪問gitlab http://ip:port

設置密碼

 

對git與svn進行區別總結:svn是對文件的一個操作,而git是對元數據的操作。如果是兩個文件一模一樣,但是名字不一樣,對於svn來說會存儲兩個文件,但是對於git來說是兩條分支(commit對象指向tree對象再指向blob對象)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章