Git的操作與理解

2021-07-12 05:57:35 字數 3092 閱讀 3491

工作樹:其儲存著倉庫內所有被管理檔案 (untracked files是不記錄在工作樹中的) 的當前狀態,隨各檔案的的改動而實時變化

head: 當前分支中最新一次提交的指標

暫存區:提交之前的臨時區域

(工作區 -add-> 暫存區 -commit-> 版本庫)

git init        :初始化倉庫,即為專案生成(.git)

git status   :檢視倉庫狀態

git log         :檢視commit日誌

-p    : 顯示每次提交的改動

檔名    : 只顯示與這個檔案有關的commit日誌

—graph   : 以圖表的形式顯示分支commit情況

git reflog      :檢視當前倉庫的操作日誌 

git add       :將檔案或改動新增到暫存區中(commit的就是暫存區)

git commit :吸納暫存區的改動,更新head(即將暫存區的改動新增到老的head快照中合成為新的head快照)

-m  : 輸入一行提交資訊 

git diff             :檢視工作樹與暫存區之間的差別(將改動add到暫存區後,git diff就不會有輸出了)

git diff head  :檢視工作樹與head之間的差別(將改動commit之後,git diff head就不會有輸出了)

【兩者是乙個遞進關係,體味如下:在將改動add到暫存區之前,暫存區狀態=head狀態,但是工作樹是記錄著新改動的,所以git diff與git diff head的輸出是一樣的。但是當add到暫存區之後,暫存區狀態=工作樹狀態 > head狀態,因而git diff沒輸出,但git diff head有輸出】

所以得出:工作樹記錄著所有被管理檔案的最新狀態,暫存區是個過渡區,而commit不是拍下當前工作樹的快照作為head,而是吸納暫存區的改動生成新的head,要是commit直接拍下工作樹的當前狀態作為新head,那還要暫存區有毛用?所以commit是不管當前工作樹的狀態,它只去暫存區裡面看該怎麼更新head,所以每次改動之後,都要先add,才能commit

【體味下引入暫存區的設計理念:把**的改動與commit之間隔離開來了,我可以改動十個檔案,工作樹負責記錄這十個檔案的新狀態。這時我可以只commit其中的兩個,只把這兩個add到暫存區再commit就行了,其他八個都不受影響。而若是沒有暫存區,commit時只是拍下工作樹的當前狀態作為新的head,可能就沒這麼靈活了】

[主幹分支master中是不能存在開發到一半的**的,所有的開發活動都應該在特性分支中進行,開發完畢之後再合併到主幹分支]

git checkout -b feature-a   =  git branch feature-a + git checkout feature-a

git checkout -b 本地分支名 origin/遠端分支名:拉遠端分支到本地,並切換到新建的本地分支上,同時還建立了該本地分支與遠端分支之間的對應聯絡

git branch:檢視本地分支

-a:檢視所有分支,包含遠端分支

-d:刪除分支

【有時候,別人剛push到遠端倉庫的分支在本地用git branch -a是看不到的,此時可以切到master pull一下,就會更新了】

git reset —hard 雜湊值 :將倉庫的工作樹、暫存區、head回溯到指定狀態

git merge feature-a :將feature-a分支合併到當前所在分支

【當merge到當前分支卻產生衝突時,當前分支下的對應檔案也會被修改的,修改後的衝突位置格式如下:

<<<<<<< head

code on feature a(本分支**)

*****==

code on feature b(合併進來的feature/b的**)

>>>>>>> feature/b

這時,可手動修改,然後用git add與git commit達到合併到本分支的目的】

【所以merge有衝突時,git已經把兩個分支的**按上述格式重新寫會到本分支的檔案中去了,只要用git status找到哪些檔案被改寫了,再去手動改好,然後重新add與commit就可以了】

git remote add origin [email protected]:倉庫名 :為本地倉庫設定遠端倉庫[只有建立了本地倉庫與遠端倉庫之間的對應聯絡,才能push或pull。在git clone時,會自動建立這種聯絡,但如果是手動在本地建的倉庫,可能就得手動建立這種聯絡了]

git clone :複製遠端倉庫到本地,並自動建立master分支,同時建立本地倉庫與遠端倉庫,master分支與origin master分支的對應聯絡

git pull origin 分支名:拉取遠端分支的**到當前分支(不會自動建立對應聯絡)

git push -u origin 分支名:將當前分支內容push到遠端分支上

-u   :upstream,置遠端分支為本地分支的上游,建立兩個分支的對應關係

github:

fork:將別人的倉庫fork到自己的github賬戶下

clone:將別人的遠端倉庫clone到本地

pull request : 將自己github賬戶下修改後的feature分支推給原始的github倉庫,請求合併

操作流程:首先fork別人的倉庫到自己的github賬戶下,然後clone到本地,建立分支並修改後,要push到自己fork來的倉庫中,不能直接push到別人的倉庫。新分支push到自己的github倉庫後,向原始倉庫傳送pull request 

git操作概念理解

1 如何列出遠端倉庫的名稱 git remote 只簡單列出遠端跟蹤倉庫的名字 2 新增遠端倉庫 新增完成之後,可以在 git 目錄下的config檔案中看到,新新增的配置 或者git branch list 使用git的好處就是不管什麼命令不知道,只要在命令後邊敲乙個 help就能看到幫助文件。比...

Git的使用與理解

廖雪峰的git教程 其實我平時很少直接用git命令,要麼用tortoisegit圖形化介面直接提交操作,要麼就是在像visual studio這樣的ide裡,有整合好的團隊管理工具 底層應該也是git 直接在介面點就行了。所以在上面的教程了解乙個git是什麼,基本工作流程是怎麼樣的,清楚commit...

Git簡單理解及基礎操作

4 linux 編譯安裝git 5 git常用的其它命令 不幸的是,microsoft的word excel格式是二進位制格式,因此,版本控制系統是沒法跟蹤檔案的改動的,如果要真正使用版本控制系統,就要以純文字方式編寫檔案。git 生成ssh 金鑰 可以使用git gui中的help show ss...