目錄
git的四大工作區域
git首次配置
克隆遠程倉庫
提交代碼到遠程倉庫
查看文件狀態(可選)
添加文件到暫存區
將暫存區的內容提交到本地倉庫
將本地的提交上傳到遠程倉庫
拉取并合并代碼
第一種方式
第二種方式
分支管理
查看與創建分支
切換分支
合并分支
刪除分支
撤銷與修改
修改最后一次提交
版本回退 (本地)?
撤銷提交
臨時儲藏(好用)
追溯代碼
git blame
git log
git show
git的四大工作區域
在開始介紹git常用操作之前,我們先對git四大工作區域進行介紹,方便后續理解。
1、工作區
是什么:工作區就是我們在電腦上能直接看到的項目文件夾,包含所有源代碼、圖片等文件,也就是我們直接用編譯器進行修改的地方。
文件狀態:文件可能處于“已修改”或者“未跟蹤”狀態。
2、暫存區
是什么:一個位于.git目錄中、看不見的特殊文件,它像一個購物車或者待提交清單。
作用:我們如果在工作區做了很多修改,但是我們只想提交其中兩個,這時,把這兩個文件的快照添加(git add)到暫存區,暫存區能夠讓我們精確的控制下一次提交要包含哪些內容。
3、本地倉庫
是什么: 位于 .git 目錄中的另一個部分,它保存了項目所有版本(提交)的完整歷史記錄。可以把它想象成一個個人電腦上的“版本檔案館”。
作用: 當我們執行 git commit 時,Git 會把 暫存區 里的所有內容,打包成一個永久性的版本快照(一個 commit 對象),并存入本地倉庫。這個過程完全在本地電腦上完成,不需要聯網。
4、遠程倉庫
是什么: 托管在網絡服務器上的項目倉庫(例如 Gitee、GitHub)。
作用: 這是團隊成員之間共享代碼、同步進度的“中央服務器”。我們可以把本地倉庫的提交“推送 (push)”到遠程倉庫,也可以從遠程倉庫“拉取 (pull)”別人的提交。
git首次配置
在我們提交前,需要先署名,這個簽名會嵌入后續的每一次提交中,方便后期代碼追溯。
# 設置你的用戶名 (這個名字會顯示在提交歷史里)
git config --global user.name "名字或昵稱"# 設置你的郵箱 (最好和 Gitee/GitHub 賬號郵箱一致)
git config --global user.email "your.email@example.com"#查看當前 Git 的所有配置信息
git config --list
這個操作只要在剛開始執行一次就好了,效果如下:
克隆遠程倉庫
在一開始,我們通常需要從遠程服務器完整地復制一個項目代碼文件以及所有歷史到本地電腦上。
命令如下:
git clone <url>
示例:
git clone https://github.com/example/project.git
這個url,我們去git項目目錄下獲取即可,如下:
提交代碼到遠程倉庫
查看文件狀態(可選)
查看狀態,以此可以看到當前每個文件處于哪個區域
git status
添加文件到暫存區
將工作區地修改“快照”并添加到待提交清單中
# 添加一個指定文件
git add main.cpp# 添加一個指定目錄
git add src/# 添加所有當前目錄下的已修改或新創建的文件
git add .
將暫存區的內容提交到本地倉庫
將暫存區的所有內容生成一個永久性的快照,并保存到本地倉庫的版本歷史中。
# 提交并打開默認編輯器來填寫提交信息
git commit# 提交并直接在命令行中附帶提交信息 (最常用)
git commit -m "修復了用戶登錄的bug"# 將 add 和 commit 合并為一步 (僅對已跟蹤過的文件有效)
git commit -am "更新了文檔說明"
將本地的提交上傳到遠程倉庫
將本地倉庫的修改上傳到遠程倉庫。
# 將本地的 main 分支推送到名為 origin 的遠程倉庫
git push origin main
但是在多人協作的時候,可能會存在其他人對遠程倉庫進行了新的提交,那么此時,我們本地倉庫代碼就和遠程倉庫代碼產生了沖突,此時就需要拉取最新的代碼到本地,進行合并后在提交到遠程倉庫。
如果合并過程中,兩個分支修改了同一個文件的同一行,就會產生 合并沖突。Git 會在文件里標記出沖突,需要你手動編輯文件,解決沖突后,再 add 和 commit 來完成合并。
拉取并合并代碼
第一種方式
1、獲取遠程倉庫最新信息
# 從名為 origin 的遠程倉庫獲取所有更新
git fetch origin
從遠程倉庫下載最新的歷史記錄和信息(比如新的提交、新的分支),并更新你本地的遠程跟蹤分支,不會修改本地工作區里的任何文件。
2、檢查更新內容
看看新獲取的更新,修改了什么
# 比較你本地的 main 和剛剛更新的遠程 main 有什么不同
git log main..origin/main# 或者,如果你想看具體的文件差異
git diff main origin/main
3、合并代碼
# 確保你當前在自己的 main 分支上
git switch main# 將遠程 main 分支的修改,合并到你本地的 main 分支
git merge origin/main
第二種方式
拉取并合并 從遠程倉庫獲取最新版本,并自動與你的本地分支合并。它相當于 git fetch + git merge 。
# 拉取遠程倉庫名為origin的 main 分支,并與本地當前分支合并
git pull origin main
分支管理
分支是 Git 的精髓,它允許我們創建一條獨立的開發線,去開發新功能或修復bug,而不會弄亂主線。
查看與創建分支
# 列出所有本地分支,并高亮當前分支
git branch# 創建一個名為 feature/new-login 的新分支
git branch feature/new-login
切換分支
git checkout <branch> 或 git switch <branch>,切換分支,工作區文件會瞬間變成那個分支所指向的狀態
# 切換到已存在的分支
git switch feature/new-login# 創建并立即切換到新分支 (復合命令,非常常用)
git switch -c hotfix/bug-123
合并分支
將一個分支的修改,合并到當前所在的分支。
# 1. 首先,切換到接受合并的目標分支 (如主分支)
git switch main# 2. 然后,執行合并,將 feature 分支合入
git merge feature/new-login
刪除分支
# 刪除一個已經合并過的本地分支
git branch -d hotfix/bug-123
撤銷與修改
修改最后一次提交
git commit --amend修改最后一次提交 如果提交后發現有小錯誤(比如注釋寫錯了),可以用它來修正。
git commit --amend "bug修改"
git commit --amend --no-edit # --no-edit 表示不修改上次的提交信息
版本回退 (本地)?
移動分支指針,回到過去某個版本。 警告:如果提交已推送到遠程,請不要使用,因為它會重寫歷史,給團隊帶來麻煩。
常用選項
- - --soft : 僅移動 HEAD 指針,你的工作區和暫存區不變。
- - --mixed (默認): 移動 HEAD,并重置暫存區,但工作區不變。
- - --hard : (極度危險) 移動 HEAD,并 徹底重置 暫存區和 工作區 ,所有未提交的修改都會 永久丟失 。
# 徹底回退到上一個版本,工作區和暫存區都恢復 (危險!)
git reset --hard HEAD~1
撤銷提交
創建一個新的提交 ,其內容剛好是指定提交的 反向操作 。這是推薦的撤銷方式 ,因為它不重寫歷史,適合用于撤銷已經推送到遠程的提交。
git revert <commit_hash_of_bad_commit>
臨時儲藏(好用)
當你手頭工作沒做完,但需要緊急切換到別的分支時,用它來保存當前工作區和暫存區的修改。
# 保存當前修改
git stash save "temp message"# 處理完別的事情后,回來恢復
git stash pop#查看所有暫存的更改
git stash list#應用最近一次暫存的更改
git stash apply#刪除指定的暫存記錄
git stash drop
追溯代碼
-
想知道某一行代碼是誰寫的? ?用 git blame 。
-
想知道某個文件/項目的演變過程? 用 git log 。
-
想看某次提交到底干了什么? 先用 git log 找到它,再用 git show 查看它。
git blame
????????如果想知道某一行代碼是誰、在哪個版本、什么時候修改的,可以使用git blame,他會按行顯示文件的每一行最后是被哪個提交修改的。
# 查看指定文件的每一行代碼的“身世”
git blame [文件路徑]
git log
git log 是一個功能極其豐富的歷史瀏覽器,可以讓我們查看一個分支、一個文件甚至一個函數的完整演變歷史。
常用選項:
- git log --oneline : 單行顯示,更緊湊。
- git log --graph : 以圖形方式展示分支的合并與分叉。
- git log -p <文件名> : 顯示指定文件的歷史,并附帶每次提交的具體代碼差異。
- git log --author="作者名" : 只看某個特定成員的提交。
a)查看整個項目的歷史
# 查看所有提交記錄
git log# 查看簡化的單行歷史,并帶上分支圖
git log --oneline --graph --decorate
b)查看單個文件的所有修改記錄
git log [文件路徑]
c)查看單個文件內容的具體的變化記錄
如果我們不僅想看提交記錄,還想看每次提交具體改了什么代碼 ,可以加上 -p 參數
git log -p [文件路徑]
這會把每一次涉及該文件的修改,用 diff 的格式全部展示出來。
git show
當我們通過 git log 或 git blame 找到了一個可疑的提交哈希碼(比如 c4d2a8f ),可以用 git show 來查看這次提交的所有細節,比如(作者、日期、提交信息)和它所做的所有代碼改動。
git show [提交哈希碼]