Git基礎命令

      網友投稿 903 2025-04-03

      Git基礎與命令


      官方文檔(中文):https://git-scm.com/book/zh/v2

      本文檔是根據官方文檔來編寫的,以官方文檔為準。

      Git基礎

      全局配置

      git config --global user.name 'your name' git config --global user.email 'xxx@xx.com'

      自報家門

      檢查配置信息

      git config --list

      獲取幫助

      # 獲取全局幫助手冊 git help # 獲取特定命令的詳細版幫助手冊 (兩個命令是等價的) git help <某個命令> git <某個命令> --help # 兩個橫杠 # 獲取特定命令的簡明版幫助手冊 git <某個命令> -h # 一個橫杠

      初始化倉庫

      # 本地目錄初始化倉庫 git init

      如果你是從遠程倉庫clone的項目,則該項目是已經初始化好的git倉庫

      克隆遠程倉庫

      # 克隆 git clone # 克隆同時修改目錄名 git clone

      初次克隆某個倉庫的時候,工作目錄中的所有文件都屬于已跟蹤文件,并處于未修改狀態,因為 Git 剛剛檢出了它們, 而你尚未編輯過它們

      檢查文件狀態

      # 查看詳細狀態說明 git status # 查看簡明狀態說明 git status -s # -s 或 --short M README # 已修改,但未暫存 (M的位置靠右,紅色) MM Rakefile # 已修改,暫存后又作了修改(有暫存和未暫存) A lib/git.rb # 新添加到暫存區,未提交 M lib/simplegit.rb # 已修改,已暫存 (M的位置靠左,綠色) ?? LICENSE.txt # 新添加,未跟蹤

      git目錄中的文件狀態包含:是否跟蹤、是否修改、是否已存入暫存區

      參數的一個橫杠表示縮寫,兩個橫杠表示全稱。

      加入暫存區 (跟蹤文件)

      # 文件加入暫存區(跟蹤指定文件) git add

      git add 命令使用文件或目錄的路徑作為參數;如果參數是目錄的路徑,該命令將遞歸地跟蹤該目錄下的所有文件。

      add 命令是將文件加入到暫存區,commit 命令的提交到本地倉庫,push 命令是推送到遠程倉庫。

      忽略文件

      添加一個名為 .gitignore 的文件,列出要忽略的文件的模式

      *.[oa] # 忽略以 .o 或 .a 結尾的文件(一般這類文件是編譯過程出現) *~ # 忽略以 ~ 結尾的文件(一般是文本編輯軟件保存的副本)

      文件 .gitignore 的格式規范如下:

      所有空行或者以 # 開頭的行都會被 Git 忽略(注釋符號)。

      可以使用標準的 glob 模式匹配,它會遞歸地應用在整個工作區中。

      glob 模式是指 shell 所使用的簡化了的正則表達式

      匹配模式可以以(/)開頭防止遞歸。

      匹配模式可以以(/)結尾指定目錄。

      要忽略指定模式以外的文件或目錄,可以在模式前加上嘆號(!)取反。

      星號(*)匹配零個或多個任意字符

      [abc] 匹配任何一個列在方括號中的字符 (這個例子要么匹配一個 a,要么匹配一個 b,要么匹配一個 c)

      問號(?)只匹配一個任意字符

      [0-9] 表示匹配所有 0 到 9 的數字。在方括號中使用短劃線分隔兩個字符, 表示所有在這兩個字符范圍內的都可以匹配

      使用兩個星號(**)表示匹配任意中間目錄,比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。

      # 忽略所有的 .a 文件 *.a # 但跟蹤所有的 lib.a,即便你在前面忽略了 .a 文件 !lib.a # 只忽略當前目錄下的 TODO 文件,而不忽略 subdir/TODO /TODO # 忽略任何目錄下名為 build 的文件夾 build/ # 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt doc/*.txt # 忽略 doc/ 目錄及其所有子目錄下的 .pdf 文件 doc/**/*.pdf

      GitHub 有一個十分詳細的針對數十種項目及語言的 .gitignore 文件列表, 你可以在 https://github.com/github/gitignore 找到它。

      查看修改的具體內容

      git diff # 比較修改之后還沒有暫存起來的變化內容。 git diff --staged # 查看已暫存的將要添加到下次提交里的內容

      git status 只能查看文件變動的狀態,并不能查看具體修改了哪些內容。使用git diff可以看到具體變動的內容。

      提交更新

      git commit # 未帶參數的會打開默認文本編輯器讓你輸入提交說明 git commit -m '提交說明' # 帶-m參數直接輸入提交說明

      使用git commit提交更新,在此之前,務必確認所有變動已經被git add添加到暫存區。

      跳過使用暫存區域

      git commit -a -m '提交說明'

      添加-a選項可以跳過git add 步驟,把已經跟蹤過的文件一并提交。

      注意:這個操作無法提交未跟蹤的文件。

      Git 基礎 - 查看提交歷史

      git log

      不傳入任何參數的默認情況下,git log 會按時間先后順序列出所有的提交,最近的更新排在最上面。

      此命令打印的數據中有一項是一長串的 SHA-1 校驗碼。

      帶入-p或--patch查看提交的具體差異:

      git log -p -2 # -p顯示差異 -2顯示最近的提交次數

      --stat 顯示每次提交的差異統計

      git log --stat

      --pretty 這個選項可以使用不同于默認格式的方式展示提交歷史

      這個選項有一些內建的子選項供你使用。 比如 oneline 會將每個提交放在一行顯示,在瀏覽大量的提交時非常有用。 另外還有 short,full 和 fuller 選項,它們展示信息的格式基本一致,但是詳盡程度不一:

      $ git log --pretty=oneline ca82a6dff817ec66f44342007202690a93763949 changed the version number 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test a11bef06a3f659402fe7563abf99ad00de2209e6 first commit

      最有意思的是 format ,可以定制記錄的顯示格式。 這樣的輸出對后期提取分析格外有用——因為你知道輸出的格式不會隨著 Git 的更新而發生改變:

      $ git log --pretty=format:"%h - %an, %ar : %s" ca82a6d - Scott Chacon, 6 years ago : changed the version number 085bb3b - Scott Chacon, 6 years ago : removed unnecessary test a11bef0 - Scott Chacon, 6 years ago : first commit

      git log --pretty=format 常用的選項 列出了 format 接受的常用格式占位符的寫法及其代表的意義。

      當 oneline 或 format 與另一個 log 選項 --graph 結合使用時尤其有用。 這個選項添加了一些 ASCII 字符串來形象地展示你的分支、合并歷史:

      $ git log --pretty=format:"%h %s" --graph * 2d3acf9 ignore errors from SIGCHLD on trap * 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit |\ | * 420eac9 Added a method for getting the current branch. * | 30e367c timeout code and tests * | 5a09431 add timeout protection to grit * | e1193f8 support for heads with slashes in them |/ * d6016bc require time for xmlschema * 11d191e Merge branch 'defunkt' into local

      Git 基礎 - 撤消操作

      你提交后發現忘記了暫存某些需要的修改,可以像下面這樣操作:

      $ git commit -m 'initial commit' $ git add forgotten_file $ git commit --amend # 重新提交,且只有一次提交記錄

      最終你只會有一個提交——第二次提交將代替第一次提交的結果。

      更多撤銷操作請了解 reset命令。

      Git 基礎 - 遠程倉庫的使用

      查看遠程倉庫

      git remote # 僅顯示遠程倉庫的名稱 git remote -v # 顯示遠程倉庫的名稱 + 地址

      添加遠程倉庫

      git remote add <遠程倉庫名>

      從遠程倉庫中抓取與拉取

      就如剛才所見,從遠程倉庫中獲得數據,可以執行:

      git fetch

      這個命令會訪問遠程倉庫,從中拉取所有你還沒有的數據。 執行完成后,你將會擁有那個遠程倉庫中所有分支的引用,可以隨時合并或查看。

      注意: git fetch 命令只會將數據下載到你的本地倉庫——它并不會自動合并或修改你當前的工作。 當準備好時你必須手動將其合并入你的工作。

      git pull

      用 git pull 命令來自動抓取后合并該遠程分支到當前分支。 這或許是個更加簡單舒服的工作流程。默認情況下,git clone 命令會自動設置本地 master 分支跟蹤克隆的遠程倉庫的 master 分支(或其它名字的默認分支)。 運行 git pull 通常會從最初克隆的服務器上抓取數據并自動嘗試合并到當前所在的分支。

      推送到遠程倉庫

      git push # git push origin master

      查看某個遠程倉庫

      git remote show # git remote show origin

      查看遠程倉庫的詳細信息。這個命令列出了當你在特定的分支上執行 git push 會自動地推送到哪一個遠程分支

      遠程倉庫的重命名與移除

      git remote rename <原名> <新名> # 重命名 git remote remove paul # 移除遠程倉庫

      Git 基礎 - 打標簽

      列出標簽

      git tag # 完整標簽列表 git tag -l "v2.0*" # 只顯示包含 v2.0 的標簽。 注意加星號(*)

      -l 或 --list 都可以。

      Git基礎與命令

      創建標簽

      Git 支持兩種標簽:輕量標簽(lightweight)與附注標簽(annotated)。

      輕量標簽很像一個不會改變的分支——它只是某個特定提交的引用。

      而附注標簽是存儲在 Git 數據庫中的一個完整對象, 它們是可以被校驗的,其中包含打標簽者的名字、電子郵件地址、日期時間, 此外還有一個標簽信息,并且可以使用 GNU Privacy Guard (GPG)簽名并驗證。 通常會建議創建附注標簽,這樣你可以擁有以上所有信息。但是如果你只是想用一個臨時的標簽, 或者因為某些原因不想要保存這些信息,那么也可以用輕量標簽。

      附注標簽

      git tag -a v1.4 -m "my version 1.4" # -a表示add, -m 表示附件信息

      通過使用 git show 命令可以看到標簽信息和與之對應的提交信息:

      git show v1.4

      輕量標簽

      輕量標簽本質上是將提交校驗和存儲到一個文件中——沒有保存任何其他信息。 創建輕量標簽,不需要使用 -a、-s 或 -m 選項,只需要提供標簽名字:

      git tag v1.4-lw # 不需要添加選項

      這時,如果在標簽上運行 git show,你不會看到額外的標簽信息。 命令只會顯示出提交信息:

      $ git show v1.4-lw commit ca82a6dff817ec66f44342007202690a93763949 Author: Scott Chacon Date: Mon Mar 17 21:52:11 2008 -0700

      后期打標簽

      你也可以對過去的提交打標簽。 假設提交歷史是這樣的:

      $ git log --pretty=oneline 166ae0c4d3f420721acbb115cc33848dfcc2121a started write support 9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile 8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme

      現在,假設在 v1.2 時你忘記給項目打標簽,也就是在 “updated rakefile” 提交。 你可以在之后補上標簽。 要在那個提交上打標簽,你需要在命令的末尾指定提交的校驗和(或部分校驗和):

      $ git tag -a v1.2 9fceb02 # 打的標簽屬于附注標簽

      共享標簽

      git push 命令并不會傳送標簽到遠程倉庫服務器上。 在創建完標簽后你必須顯式地推送標簽到共享服務器上。 這個過程就像共享遠程分支一樣——你可以運行 git push origin

      git push origin v1.5 # 顯式地推送標簽到遠程倉庫 git push origin --tags # 一次性推送所有不在遠程倉庫上的標簽

      現在,當其他人從倉庫中克隆或拉取,他們也能得到你的那些標簽。

      刪除標簽

      要刪除掉你本地倉庫上的標簽,可以使用命令 git tag -d 。 例如,可以使用以下命令刪除一個輕量標簽:

      $ git tag -d v1.4-lw Deleted tag 'v1.4-lw' (was e7d5add)

      注意上述命令并不會從任何遠程倉庫中移除這個標簽,你必須用 git push :refs/tags/ 來更新你的遠程倉庫:

      第一種變體是 git push :refs/tags/

      $ git push origin :refs/tags/v1.4-lw To /git@github.com:schacon/simplegit.git - [deleted] v1.4-lw

      上面這種操作的含義是,將冒號前面的空值推送到遠程標簽名,從而高效地刪除它。

      第二種更直觀的刪除遠程標簽的方式是:

      $ git push origin --delete

      檢出標簽

      如果你想查看某個標簽所指向的文件版本,可以使用 git checkout 命令, 雖然這會使你的倉庫處于“分離頭指針(detached HEAD)”的狀態——這個狀態有些不好的副作用:

      $ git checkout 2.0.0 Note: checking out '2.0.0'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final $ git checkout 2.0-beta-0.1 Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final HEAD is now at df3f601... add atlas.json and cover image

      在“分離頭指針”狀態下,如果你做了某些更改然后提交它們,標簽不會發生變化, 但你的新提交將不屬于任何分支,并且將無法訪問,除非通過確切的提交哈希才能訪問。 因此,如果你需要進行更改,比如你要修復舊版本中的錯誤,那么通常需要創建一個新分支:

      $ git checkout -b version2 v2.0.0 Switched to a new branch 'version2'

      如果在這之后又進行了一次提交,version2 分支就會因為這個改動向前移動, 此時它就會和 v2.0.0 標簽稍微有些不同,這時就要當心了。

      Git 命令別名

      Git 并不會在你輸入部分命令時自動推斷出你想要的命令。 如果不想每次都輸入完整的 Git 命令,可以通過 git config 文件來輕松地為每一個命令設置一個別名。 這里有一些例子你可以試試:

      $ git config --global alias.co checkout $ git config --global alias.br branch $ git config --global alias.ci commit $ git config --global alias.st status

      這意味著,當要輸入 git commit 時,只需要輸入 git ci。

      在創建你認為應該存在的命令時這個技術會很有用。 例如,為了解決取消暫存文件的易用性問題,可以向 Git 中添加你自己的取消暫存別名:

      $ git config --global alias.unstage 'reset HEAD --'

      這會使下面的兩個命令等價:

      $ git unstage fileA $ git reset HEAD -- fileA

      這樣看起來更清楚一些。 通常也會添加一個 last 命令,像這樣:

      $ git config --global alias.last 'log -1 HEAD'

      這樣,可以輕松地看到最后一次提交:

      $ git last commit 66938dae3329c7aebe598c2246a8e6af90d04646 Author: Josh Goebel Date: Tue Aug 26 19:48:51 2008 +0800 test for current head Signed-off-by: Scott Chacon

      可以看出,Git 只是簡單地將別名替換為對應的命令。 然而,你可能想要執行外部命令,而不是一個 Git 子命令。 如果是那樣的話,可以在命令前面加入 ! 符號。 如果你自己要寫一些與 Git 倉庫協作的工具的話,那會很有用。 我們現在演示將 git visual 定義為 gitk 的別名:

      $ git config --global alias.visual '!gitk'

      Git GitHub VPC終端節點 代碼托管 CodeHub 代碼檢查 CodeCheck

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:wps的ppt視頻怎么放進去(wps如何把視頻放在ppt里播放)
      下一篇:word2007中如何設置表格邊距圖解教程(word文檔表格左右邊距怎么設置)
      相關文章
      亚洲AV无码成人专区片在线观看 | 亚洲日本国产综合高清| 国产亚洲成AV人片在线观黄桃| 男人的天堂亚洲一区二区三区| 亚洲免费闲人蜜桃| 亚洲网站视频在线观看| 亚洲黄色在线观看| 亚洲欧洲日本精品| 亚洲成人在线免费观看| 亚洲精品偷拍无码不卡av| 亚洲精品视频观看| 亚洲国产成人超福利久久精品 | 五月天婷亚洲天综合网精品偷| 99亚洲乱人伦aⅴ精品| 无码天堂亚洲国产AV| 国产成人 亚洲欧洲| 亚洲乱码中文字幕综合234| 亚洲另类少妇17p| 亚洲韩国精品无码一区二区三区| 亚洲精品制服丝袜四区| 久久精品国产亚洲AV网站| 亚洲邪恶天堂影院在线观看| 精品亚洲成AV人在线观看| 亚洲国产品综合人成综合网站| 亚洲av永久无码精品天堂久久| 久久久久亚洲国产| 国产成人+综合亚洲+天堂| 国产成人综合亚洲AV第一页| 亚洲热妇无码AV在线播放| 亚洲成人午夜在线| 亚洲国产精品久久网午夜| 亚洲综合无码一区二区痴汉| 亚洲aⅴ天堂av天堂无码麻豆| 亚洲成a人片在线观看日本麻豆| 亚洲一区二区精品视频| 亚洲成av人影院| 亚洲国产精品网站久久| 亚洲色精品三区二区一区| 亚洲av麻豆aⅴ无码电影| 国产亚洲精品影视在线产品 | 亚洲人成网站色7799|