Git命令行操作
- 本地庫操作
- 本地庫初始化
- 命令:git add
-
在工作目錄下 右鍵鼠標打開 Git Bash Hear
然後執行git init 命令 進行初始化
- 效果
-
會生成一個.get 的隱藏文件目錄,如果要看到它,需要通ls -lA 命令來查看
- 注意
- git目錄中存放的是本地庫相關的子目錄和文件,不要刪除,也不要隨意修改
- 設置簽名
- Git規定開發人員必須設置簽名,類似於用戶名
- 本地庫初始化
2 形式:
用戶名 :zhangsan
Email地址: [email protected] 可以不存在
3 作用
區分不同的開發人員身份
4 辨析
之前提過的登錄代碼託管中心的用戶名和密碼和簽名的用戶名沒有任何關係。
5命令
這裏又分爲兩個級別
1項目級別/倉庫級別
僅在當前本地庫範圍內有效
git config user.name tom_pro
git config user.email [email protected]
在 .git/config文件中查看簽名
cat .git/config
2系統用戶級別
登陸當前操作系統的用戶範圍
git -global user.name tom_glob
git -global user.email [email protected]
查看簽名
返回系統根目錄 cd ~
查看隱藏文件 ls -lA|less
查看內容 cat .gitconfig
如果兩個級別同時存在會優先使用項目級別,如果只有系統級別,那麼只使用系統用戶級別爲準,二者都沒有則報錯!
3添加提交以及查看狀態操作
查看工作區和緩存區狀態 git status
On branch master 在master 分支
No commits yet 沒有任何以及提交的東西,也就是說本地庫什麼東西都沒有
Nothing to commit (Create/copy files and use “git add” to track) 暫存區沒有提交的東西
然後按它的提示進行創建文件
然後再執行 git status
會出現以下幾行提示:
On branch master 在master 分支
No commits yet 沒有任何以及提交的東西,也就是說本地庫什麼東西都沒有
Untrack files
(use “git add <file>...” to include in what will be committed)
good.txt
這裏的意思是可以使用 git add good.txt 將這個文件提交到緩存區
然後按照提示進行 操作後會出現提示警告
WARN: LF will be replace by CRLF in good.txt
這裏的意思是 LF 將被替換成CRLF 即將window的結尾替換成Unix 的結尾
然後再執行 git status 會發現在緩存區出現綠色的good.txt 文件
如果此時要刪除緩存區的文件可以使用 git rm --cacahed good.txt
此時再執行git status 後會發現又回到了之前的提示。
重新提交到緩存區然後將緩存區的文件提交到本地庫 執行 git commit good.txt
4 基本操作總結
狀態查看操作(工作區緩存區)
git status
工作區添加文件到緩存區
git add [file name]
緩存區提交到本地庫
git commit -m “xxxx” [file name]
查看歷史記錄操作
git log
git log --pretty= oneline
git log --oneline
git reflog 查看版本移動步數
5 版本後退前進(三種方式)
基於索引值(推薦)
命令
git reset --heard [版本號]
使用異或符號 ^
只能往後退
退一步: git reset --hard HEAD^
退N步: git reset --hard HEAD^^^^^^^ N 個異或符號
使用波浪號~符號
後退三步: git reset --hard HEAD~3
reset 命令的三個參數對比
在命令行 使用git help reset命令查看文檔
- Working Tree 當前的工作區域
- Index/Stage 暫存區域,和git stash命令暫存的地方不一樣。使用git add xx,就可以將xx添加近Stage裏面
- Repository 提交的歷史,即使用git commit提交後的結果
剛開始 working tree 、 index 與 repository(HEAD)裏面的內容都是一致的
當git管理的文件夾裏面的內容出現改變後,此時 working tree 的內容就會跟 index 及 repository(HEAD)的不一致,而Git知道是哪些文件(Tracked File)被改動過,直接將文件狀態設置爲 modified (Unstaged files)。
當我們執行 git add 後,會將這些改變的文件內容加入 index 中 (Staged files),所以此時working tree跟index的內容是一致的,但他們與repository(HEAD)內容不一致。
接着執行 git commit 後,將Git索引中所有改變的文件內容提交至 Repository 中,建立出新的 commit 節點(HEAD)後, working tree 、 index 與與repository(HEAD)區域的內容 又會保持一致。
實驗:提交四次
git reset --hard HEAD^
--hard:在本地庫移動head指針
重置暫存區
重置工作區
git rest --soft 版本號
保留工作目錄,並把重置 HEAD 所帶來的新的差異放進暫存區
由於 HEAD 從 4 移動到了 3,而且在 reset 的過程中工作目錄和暫存區的內容沒有被清理掉,所以 4 中的改動在 reset 後就也成了工作目錄新增的「工作目錄和 HEAD 的差異」。這就是上面一段中所說的「重置 HEAD 所帶來的差異」。
此模式下會保留 working tree工作目錄的內容,不會改變到目前所有的git管理的文件夾的內容;也會
保留 index暫存區的內容,讓 index 暫存區與 working tree 工作目錄的內容是一致的。就只有 repository 中的內容的更變需要與 reset 目標節點一致,因此原始節點與reset節點之間的差異變更集合會存在與index暫存區中(Staged files),所以我們可以直接執行 git commit 將 index暫存區中的內容提交至 repository 中。當我們想合併「當前節點」與「reset目標節點」之間不具太大意義的 commit 記錄(可能是階段性地頻繁提交)時,可以考慮使用 Soft Reset 來讓 commit 演進線圖較爲清晰點。
此時再提交
這就是--soft 和 --hard 的區別:
--hard 會清空工作目錄和暫存區的改動,而 --soft則會保留工作目錄的內容,並把因爲保留工作目錄內容所帶來的新的文件差異放進暫存區。
reset 不加參數(mixed):保留工作目錄,並清空暫存區
修改文件並放入緩存區,簡而言之,就是「把所有差異都混合(mixed)放在工作目錄中」。
reset 的本質:移動 HEAD 以及它所指向的 branch
實質上,reset 這個指令雖然可以用來撤銷 commit ,但它的實質行爲並不是撤銷,而是移動 HEAD ,並且「捎帶」上 HEAD 所指向的 branch(如果有的話)。也就是說,reset 這個指令的行爲其實和它的字面意思 "reset"(重置)十分相符:它是用來重置 HEAD 以及它所指向的 branch 的位置的。
而 reset --hard HEAD^ 之所以起到了撤銷 commit 的效果,是因爲它把 HEAD 和它所指向的 branch 一起移動到了當前 commit 的父 commit 上,從而起到了「撤銷」的效果:
所以同理,reset --hard 不僅可以撤銷提交,還可以用來把 HEAD 和 branch 移動到其他的任何地方。
git reset --hard branch2
git 永久刪除文件找回
由於已經將文件提交到了本地庫,所以本地庫會一直存在提交記錄,那麼想要恢復就很簡單,也就是恢復上一個版本而已,相當於把HEAD 指針向下移動一次即可。
git 添加到暫存區刪除文件找回
先將文件提交到緩存區然後提交到本地庫,然後刪除工作區文件,提交到緩存區,但是沒有提交到本地庫,然後找回
然後通過 git reset --hard HEAD 找回
文件比較 git diff [文件名]