一.初始化
1.git init初始化倉庫
git init 用于在當前目錄下初始化一個本地 Git 倉庫,讓這個目錄開始被 Git 跟蹤和管理。
生成
.git
元數據目錄,從而可以開始進行提交、回退、分支管理等操作。
2.git config user.name/user.email配置本地倉庫
# 設置用戶名
git config user.name "你的名字"# 設置郵箱(與 GitHub 等平臺賬戶一致)
git config user.email "你的郵箱@example.com"# 查看當前配置
git config -l#刪除配置
git config --unset user.name
git config --unset user.email
上面配置的是局部的本地倉庫 加上--global可以設置為全局的。
# 設置全局用戶名 git config --globa user.name "你的名字"# 設置全局郵箱(與 GitHub 等平臺賬戶一致) git config --globa user.email "你的郵箱@example.com"# 查看當前配置 git config -l#刪除配置 git config --globa --unset user.name git config --globa --unset user.email
什么是局部?什么是全局?為什么?
Git 是為多個項目、多用戶設計的系統,所以需要支持“不同作用范圍的配置”:
作用域 說明 示例 --system
整個操作系統層面(對所有用戶生效) 不常用,配置在 /etc/gitconfig
--global
當前登錄用戶的所有項目 常用,配置在 ~/.gitconfig
(默認) 當前 Git 項目的配置(最精確) 配置在 .git/config
文件中
你想干什么 推薦方式 所有項目都用同一個名字和郵箱 用 --global
設置一次即可某個項目用不同的名字和郵箱 在項目目錄下直接 git config
二.添加
1.git add把修改加入暫存區
2.git commit提交到版本庫????????
git add把代碼放入暫存區? git commit把暫存區代碼存入版本庫
區域 位置名 功能說明 工作區 工作目錄(Working Directory) 你正在編輯的真實文件所在位置 暫存區 stage
或index
保存你“準備提交”的文件快照 版本庫 .git/objects
、.git/HEAD
保存所有歷史版本(已提交內容) ![]()
gti log查看歷史提交記錄
三.查看
1.git status查看當前倉庫的狀態
git status 是 Git 中最常用的命令之一,用于查看當前倉庫的狀態,特別是在你開發過程中了解哪些文件發生了變化、是否已被 add、是否有未提交的內容等。
狀態類別 含義說明 Untracked files 工作區中有新建但未被 Git 跟蹤的文件(沒被 add
)Changes not staged for commit 已被修改但未 add
進暫存區Changes to be committed 已 add
,等待commit
nothing to commit 所有文件都已提交,倉庫干凈
git status -s ? ??簡潔模式(short),常用于配合腳本或快速查看
?其它狀態縮寫
狀態符號 文件路徑 含義 A
TCP/client.cc
?? 新文件,已 add
進暫存區,等待提交M
UDP/client.cc
?? 文件被修改,但尚未 add
,還在工作區??
TCP/server.cc
🆕 新文件,未被 Git 跟蹤,沒被 add
符號 含義說明 ??
Untracked(未跟蹤文件) A
Added(已添加到暫存區的新文件) M
Modified(已修改) D
Deleted(刪除) R
Renamed(重命名) C
Copied(復制) AM
新文件添加后又被修改 MM
已 add
的文件再次修改,暫存區和工作區都修改了UD
unmerged conflict:你刪除了文件,但它在合并中被修改 UU
合并沖突(兩邊都修改)
2.git diff?查看代碼變更內容
git diff 是 Git 中用于查看代碼變更內容的命令,幫你對比不同版本、文件或狀態的具體修改細節(逐行對比)。
git diff?工作區 和 暫存區 差異(沒add的內容)
表示:工作區 和 暫存區 的差異(即你修改了但還沒
add
?到暫存區的內容)
后面還也加指定文件夾/文件 沒有差異不會輸出
git diff --cached?暫存區 和 最新提交 的差異(沒push的內容)
表示:已經
git add
過的內容,和當前最新一次提交之間的差異(也就是你準備push提交的內容)當然后面也可以指明文件/文件夾
git status git diff配合使用 找到變化文件+查看具體變化
命令 用途 git status
看“哪些文件”發生了變化 git diff
看“具體改動內容是啥”
# 1. 先查看有哪些變更的文件
git status# 2. 查看未 add 的文件改了什么
git diff# 3. 如果 add 了,再看 add 的內容(準備 commit 的)
git diff --cached# 4. 最后確認無誤,提交
git commit -m "說明"
git status -s 發現TCP/client.cc文件add到了暫存區 還進行了修改,想看看具體改了什么就用
git diff TCP/client.cc找具體的改動
四.git reset版本回退
git reset 回退版本(會更改提交歷史) 用于本地撤回提交、修改。
git reset 有三個選項
--soft
回退版本庫?
--mixed (默認)
回退版本庫+暫存區
--hard
回退版本庫+暫存區+工作區
慎用 --hard 版本庫 暫存區 工作區的內容全會修改 不可恢復????????????????????????????????????????????????
想做什么事情 用哪個選項 解釋 ? 只想回退提交記錄,但保留已經寫好的代碼和 add
狀態(準備重新commti提交)git reset --soft
改了 commit,但代碼和暫存區內容保留 ? 回退提交記錄,并把代碼從暫存區拿出來,保留在工作區(想重新 add
)git reset --mixed
(默認)改了 commit,撤銷了 git add
,但代碼還在?? 提交錯了、代碼也不想要了,想恢復成某個版本的干凈狀態 git reset --hard
徹底抹除提交 + 暫存區 + 工作區,慎用!
怎么選?
你想做什么 使用命令 解釋說明 💡 只想換個提交說明,不改代碼 git reset --soft HEAD^
回退提交,保留暫存區( add
)和代碼,重新寫commit
信息?? 不想提交當前內容,改完代碼再提交 git reset HEAD^
(默認是--mixed
)回退提交 + 撤銷 add
,代碼保留在工作區,可修改再add
? 完全不想要這次提交,也不想要這次改的代碼了 git reset --hard HEAD^
回退提交 + 暫存區 + 工作區全部還原,代碼會丟失(??危險)
git log --oneline+git reset 進行版本回退
git log --oneline (簡略版)先獲取提交記錄 里面的提交ID(黃色部分)
git reset +要回退到的版本的提交ID?(默認選項--mixed 版本庫+暫存庫都會回退)
后悔了怎么辦?
只要有對應的版本ID 就可以返回
如果沒有保存版本ID怎么辦?
git relog 查看每個版本庫的ID
git reflog 用來查看你所有 HEAD 指針的變動歷史記錄,里面會有每個版本的ID
五.撤銷修改
撤銷修改 我們分為三種情況 1.只在工作區 2.add到了暫存區 3.commit到了版本庫
狀態描述 推薦命令 簡明說明 改錯代碼,未 add git checkout -- <文件>
恢復工作區代碼為上次提交版本,最安全 改錯代碼,已 add
git reset <文件> && git checkout -- <文件>
先撤銷暫存,再還原代碼 已commit,但未 push
git reset --hard HEAD^(多個文件)或者
git reset <文件> && git checkout -- <文件> (單個文件)
回退最近一次提交,代碼和提交記錄都丟棄,危險操作
git checkout -- <file>?撤銷該文件改動 恢復為上次 commit 的版本
git checkout -- <文件>
把工作區file文件的代碼進行撤銷修改。
git reset <文件> && git checkout -- <文件>?
git reset <文件> 只針對file文件 版本庫 暫存區進行撤銷
想撤銷全部文件的話 git reset HEAD?
HEAD指向當前版本 HEAD^指向上個版本 HEAD^^上兩個版本 ...
帶上 --hard就是連帶工作區的代碼也進行修改 但不能但只對一個文件進行操作,會把所有文件進行修改。
git reset --hard HEAD^
git reset --hard HEAD^ 版本庫 贊成區 工作區都回退到上個版本
因為已經commit提交到版本庫了,log已經記錄當前版本ID HEAD指向當前版本,撤銷就是要回到上一個版本 所以是HEAD^。
六.git rm刪除文件
將文件 從 Git 的版本庫和暫存區中刪除,并默認在工作區(磁盤)也刪除該文件。
1.git rm <file> 刪除指定文件
此時文件從 暫存區 和 工作區 都會被刪除;
2.git commit -m "刪除文件"
寫入版本庫 文件在版本庫中也被刪除
不想刪除工作區的文件,怎么辦?
git rm --cached <file>?工作區中文件不刪除
1.git rm --cached <file>
僅在暫存區中刪除 工作區中不刪除
2.git commit -m "刪除文件"
刪除版本庫中的
刪除目錄加 -r 選項