您好,登錄后才能下訂單哦!
本篇內容主要講解“linux中git命令的作用是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“linux中git命令的作用是什么”吧!
前言
HEAD指針 始終指向的是當前分支的最新版本號,HEAD^, HEAD^^, ^ 的個數 n 或 HEAD~n,n 代表前 n 個版本號。
在項目中直接使用 linux rm 只會刪除工作區的文件,git rm 同在刪除工作區文件的同時刪除 stage 中的,或使用 git rm --cached 只刪除 stage 中的。
一些基本的操作
#全局配置 git config --global user.name "your username" git config --global user.email youremail@email.com git config --global color.ui true # mkdir git_proj & cd git_proj git init echo "# readme.md" >> README.md git add README.md git commit -m "readme commit" # 添加遠程倉庫 并給它取個別名 origin git remote add origin git@github.com:username/repositoryName.git # 將本地倉庫推送至 origin 的 master 分支并與此分支關聯(-u 的作用,后期不必在使用) git push -u origin master # 從遠程倉庫 origin 的 master 分支獲取最新源碼并下載到 tmp 分支 git fetch origin master:tmp # 比對 tmp 分支于 master 分支做了哪些改動 git diff master tmp # 合并 tmp 分支到 master 分支 git merge tmp # clone copy 一個完整的遠端倉庫到本地 git clone git@github.com:username/repositoryName.git # pull 獲取 origin 的 master 分支并直接和當前分支合并 # 所以可能會發生沖突 git pull origin master
checkout
checkout 命令有兩個主要作用:切換分支 和 回滾文件到當前的 stage 版本 或 repository 版本
1、切換分支
# 切換到 new_branch 分支 git checkout new_branch # 創建并切換到 new_branch 分支 git checkout -b new_branch
2、回滾工作區的文件到最新 stage 版本 或 repository 版本,即從 stage 或 repository 中檢出最新版本
# -- 是文件標示符 表名后面的參數為文件 避免產生切換 branch 的歧義 git checkout -- <filename>
回滾時會先檢查 stage 中是否有對應的文件,如果沒有才會使用 repository 中最新的版本。而當對某文件進行了多次修改和 add 操作后,使用 checkout 我們只能將文件回滾到最新一次的 add 的版本。
但在某些場景下我們可能想回滾到 repository 中的最新版本,怎么做呢?配合 reset 命令的可以很容易做到。
先給出命令:
git reset HEAD <filename> & git checkout -- <filename>
這樣就可以將工作區的 filename 回滾到 repository 中的最新版本了。具體原理我們將在實例中詳細的講解。
reset
git 的 reset 命令比較繞,需要耐心的理解。簡單來說,reset 有三種重置級別,我們需要準確理解每個級別的作用。
soft:回退版本號。作用于 repository
mixed:回退版本號,重置 stage。作用于 repository 和 stage
hard :回退版本號,重置 stage,重置工作區源碼。作用于 repository,stage 和 workspace
我們簡單展示下 repository 的版本號,我們以此為 demo 分別嘗試三個級別的 reset
git log version D (HEAD) <-- HEAD指針 version C (HEAD^) version B (HEAD^^) version A (HEAD~3)
命令格式:
git reset [--soft|--mixed|--hard] version_no <filename>
--soft:只是單純的移動 repository 的 HEAD指針 到制定版本號。stage 和工作區沒有任何變化。
# 將 HEAD 指針回滾至上一版本 使用 git log 你會發現提交日志退回到了上一版本號 git reset --soft HEAD^ #版本號現狀 version C <-- HEAD指針 version B version A
--mixed:默認選項,移動 repository 的 HEAD指針 到指定版本號,同時用此版本重置 stage 區,所以可能會讓工作區的某些文件處于 unstage 狀態(當工作區的文件與 repository 中的版本不一致時)。注意,這里是可以指定文件的。soft 本身和文件無關,hard 則是不能單獨指定文件,只能全部重置。
# HEAD指針 還是指向 HEAD git reset HEAD^2 <filename> #版本號現狀 version B <-- HEAD指針 version A
HEAD指針 指向 version B,并且 stage 已經被 version B 的文件重置,工作區則不受影響。
這里有個很實用的小技巧:
git reset version_no <filename> & git checkout -- <filename>
這兩個命令組合在一起可以讓工作區的指定文件回滾到 repository 中對應的 version_no 版本。
如果 version_no 是 HEAD 的話那就可以回滾文件到最新一次的提交。
--hard:謹慎使用!!!移動 repository 的 HEAD指針 到指定版本號,同時用此版本重置 stage 區 和 工作區源碼。這里要特別注意,工作區的源碼也會被覆蓋重置掉,你的修改會全部丟失。簡單來說就是將代碼徹底恢復到指定版本。hard 是沒辦法指定文件的,要么回滾,要么全回滾。
# HEAD指針 還是指向 HEAD git reset --hard HEAD^3 #版本號現狀 version A <-- HEAD指針
此時,HEAD指針 指向 version A,并且 stage 和 工作區的文件已經被 version A 的文件重置。整個項目的狀態完全回到提交 version A 時按下回車鍵的那一刻。
rm
git rm 不同于直接使用 rm,git rm 會刪除工作區 和 stage 區的內容。注意:這里你沒辦法再使用 git checkout -- <filename>
來回滾操作了,因為工作區也沒有 filename 文件了,沒辦法與 repository 做關聯,只能使用 git reset HEAD <filename> 來重置 stage 中的此文件,然后 git checkout -- <filename>
git rm [--cached] [-r] [-f] <filename>
這里就提示一點,只想把 stage 中的文件刪除掉讓文件脫離 git 的管理,可以使用
git rm --cached <filename>
此時工作區的 filename 并不會被刪除,但狀態會被改為 untracked,同時 stage 會記錄下 filename 的狀態為刪除,提交的話版本庫將新增一個 filename 被刪除掉的版本。
刪除 stage 中的文件和使用 reset命令 重置 stage 中的文件是有區別的,刪除會讓文件狀態更改為 untracked,而重置會讓文件狀態更改為 unstage(如果工作區和 stage 文件內容不一致)。
小實例場景:
1、回滾工作區某文件到指定的 repository 版本
工作中,我們可能會針對某文件做多次修改和 add 到 stage 的操作,而后發現思路完全錯了,需要重新設計開發。
比如文件 foo 的 A版 我提交了一次后,又進行了 B版 和 C版 的兩次修改并 add 到了 stage 區。第三次修改后 D版 我發現一開始思路就錯了,需要重新設計。那此時直接使用 git checkout -- foo
是拿不到最初的 A版 的,因為 stage 區還存放著 foo 的 C版。此時我們便可以使用 git reset HEAD foo
命令,repository 最新版本號中存放著 foo 的 A版,命令會在不移動 HEAD 的前提下,使用 foo A版 去重置 stage 區。命令執行后 stage 區的 foo 文件已經是 A版 了。我們再使用 git checkout -- foo
便可以將工作區的 foo D版 回滾至 A 版。即:
git reset HEAD foo & git checkout -- foo
HEAD 代表當前版本,所以 HEAD指針 不會移動。同時 stage 區會被 repository 的當前版本的 filename 重置,也就說 stage 區 存放的 filename 與 repository 中相同了。此時我們再使用 git checkout -- <filename>
便可以回滾工作區的 filename 到 repository 的當前版本。其實就是利用 reset --mixed 會重置 stage 區,然后 checkout 會將 stage 區的文件檢出到工作目錄。當然,reset 很靈活,可以回滾任意指定的版本。
其實如果只是回滾至當前版本的話,還有個命令能實現相同的功能
git rm --cached <filename> & git checkout -- <filename>
git rm --cached <filename>
會將 stage 中的此文件刪除,文件狀態會變為 untracked,然后 checkout 時發現 stage 中木有此文件,故會去 repository 的當前版本中檢出此文件。
diff
git diff -- <filename> 工作區 比較 暫存區
git diff --cached -- <filename> 暫存區 比較 本地庫當前版本
git diff HEAD~N -- <filename> 工作區 比較 本地庫第N個版本
git diff HEAD HEAD^ -- <filename> HEAD 比較 HEAD^
git diff master tmp -- <filename> master 比較 tmp
git diff SHA1 SHA2 -- <filename> 比較兩個歷史版本之間的差異
到此,相信大家對“linux中git命令的作用是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。