git 的一些筆記

2021-09-06 16:59:30 字數 2954 閱讀 8080

git config

git config存在三個地方 :

1./.git/config 專案級別

2.~/.gitconfig 使用者級別

3./etc/gitconfig 系統級別

git config -e 檢視專案級別的配置

git config -e --global 檢視使用者級別的配置

git config -e --system 檢視系統級別的配置

新增git使用者配置

git config user.name 「test」

git config user.email 「[email protected]

新增別名配置

git config --global alias.st status

git config --global alias.ci commit

刪除配置

git config --unset user.name

檢視配置

git config user.name

-------------

git log 檢視提交日誌

git log --pretty=oneline 按行顯示提交日誌

工作區 暫存區stage 版本庫

git diff 檢視工作區與暫存區之間的差異

got diff head 檢視工作區與head(當前版本庫的頭指標)進行比較

git diff master 檢視工作區與某分支進行比較

git diff --cached 檢視提交暫存區和版本庫中檔案的差異

git diff --staged 同上

git status 檢視檔案狀態

git status -s 檢視檔案狀態的精簡格式

注意m的位置和顏色..如果m前有空格則是未add到暫存區.如果無空格已經add到暫存區.如果有兩個mm代表之前提交過到暫存區,同時還有沒有提交到暫存區的內容

當執行 git status 或者git diff 掃瞄工作區改動的時候 先根據.git/index檔案中記錄的時間戳,長度等資訊判斷工作區檔案是否改變,如果工作區的檔案時間戳或者長度改變了,需要開啟檔案讀取檔案內容與更改前的原始檔案相比較判斷檔案內容是否被更改.若未改變則將該檔案新的時間戳和長度記錄到index檔案中

git add執行時,暫存區的目錄樹將被更新,同時工作區修改的檔案內容會被寫到物件庫中的乙個新物件中.該物件的id會被記錄在暫存區的索引中

git commit 執行時,暫存區的目錄樹會寫到物件庫中,master分支會做相應的更新,即master最新指向的目錄樹就是剛剛寫入的暫存區目錄樹

git reset head 暫存區的目錄樹會被重寫,被當前分支指向的目錄樹所替換

git rm --cached 會直接從暫存區刪除檔案,工作區不作出改變

git checkout . 或者git checkout -- 會用暫存區全部的檔案或指定的檔案替換工作區的檔案.這個操作很危險,會清除工作區中未新增到暫存區的改動.

git checkout head . git checkout head 會用head指向的master分支中的全部或部分檔案替換暫存區和工作區中的檔案.極危險.會同時清除工作區中未提交的改動和清除暫存區中未提交的改動

.git/index 檔案索引目錄樹,記錄檔名和檔案的狀態資訊

.git/objects 儲存檔案的內容

.git/refs 儲存引用的命名空間其中heads目錄下的引用又稱為分支

git branch 檢視當前的工作分支 * 表明當前分支

git log -l head

git log -l master

git log -l refs/heads/master

上面三個返回值是一樣的..

find .git -name head -o -name master

.git/head

.git/logs/head

.git/log/refs/heads/master

.git/refs/heads/master

head指向當前分支.

refs/heads/master 裡面儲存了最後一次提交的雜湊值.

通過雜湊值..可以找到 tree parent 的雜湊值

git cat-file -p ******x

找到tree.能找到具體檔案..

找到parent,能找到上一次提交.一直往前找.直到沒有parent

git reset --hard head^ 重置master到上乙個提交.head^代表上一次提交,會改變ref/heads/master中的commit雜湊值到為上一次提交的雜湊值.並改變工作區

這樣使用會很危險,會徹底的丟棄歷史.

如何恢復呢?

使用reflog檢視日誌檔案.

git reflog show master | head -5

然後恢復到想要的歷史

git reset --hard master@

head也是乙個指標,可以指向分支或者任何一次commit

git checkout 會重寫工作區

git checkout branch 遷出branch分支,更新head以指向branch分支,以及用branch指向的樹更新暫存區和工作區

git checkout 彙總工作區/暫存區和head的差異

git checkout head 同上

git checkout -- filename 用暫存區中filename檔案來覆蓋工作區中的filename檔案.相當於取消上次執行git add filename以來的本地修改

git checkout branch --filename 維持head指向不變.用branch所指向的提交中的filename替換暫存區和工作區相應的檔案.注意會降暫存區和工作區中的filename直接覆蓋.

git checkout -- . git checkout .會取消所有本地的修改..相當於用暫存區的所有檔案直接覆蓋本地檔案,不給使用者任何確認的機會.

git一些筆記

1 關於head head 是乙個隊當前檢出記錄符號引用,也就是指向其基礎上進行工作的提交記錄 head總是指向當前分支的上一次提交 git checkout master 本地切換至master的上一次提交 git checkout c3 分離head,切換至c3的提交記錄 git chekcou...

關於git的一些命令筆記

檢視工作區狀態 git status 檢視本地分支 git branch 建立並切換dev分支 git switch c dev 切換dev分支 git switch dev 複製乙個特定的提交到當前分支 git cherry pick 254be12 儲存當前工作現場 git stash 檢視工作...

Git筆記 git常用的一些命令(本地)

這裡記錄一些git常用的命令,畢竟不經常使用git的話,會經常遺忘,話不多少,用最簡單的方式記錄命令 git initgit add readme.txtgit commit m this is a file,need to commit git statusgit log版本回退 選擇回退的版本,...