git 最全命令總結都在這裏了

在線練習

https://learngitbranching.js.org/?locale=zh_CNgit

閱讀git官網的Book, 順手記錄一下,方便查閱

https://git-scm.com/book/en/v2vim

git 基礎命令

git config

  1. /etc/gitconfig 文件: 包含系統上每個用戶及他們倉庫的通用配置。 若是在執行 git config 時帶上 --system 選項,那麼它就會讀寫該文件中的配置變量。 (因爲它是系統配置文件,所以你須要管理員或超級用戶權限來修改它。)
  • ~/.gitconfig 或 ~/.config/git/config 文件:只針對當前用戶。 你能夠傳遞 --global 選項讓 Git 讀寫此文件,這會對你係統上 全部 的倉庫生效。
  • 當前使用倉庫的 Git 目錄中的 config 文件(即 .git/config):針對該倉庫。 你能夠傳遞 --local 選項讓 Git 強制讀寫此文件,雖然默認狀況下用的就是它。。 (固然,你須要進入某個 Git 倉庫中才能讓該選項生效。)
  • 配置用戶:緩存

    • git config --global user.name 「username」
    • git config --global user.eamil 「email」
    • 當你想針對特定項目使用不一樣的用戶名稱與郵件地址時,能夠在那個項目目錄下運行沒有 --global 選項的命令來配置。(–local 至關於上述的local)
  • 配置編輯器服務器

    • git config --global core.editor.vim
    • 當 Git 須要你輸入信息時會調用它。 若是未配置,Git 會使用操做系統默認的文本編輯器。
  • 查看配置信息app

    • 查看當前倉庫的配置: git config --list
    • git config < key >

git help

  1. git help < verb >
  • git < verb > --help
  • man git-< verb >

git init

該命令將建立一個名爲 .git 的子目錄,這個子目錄含有你初始化的 Git 倉庫中全部的必須文件,這些文件是 Git 倉庫的骨幹。 可是,在這個時候,咱們僅僅是作了一個初始化的操做,你的項目裏的文件尚未被跟蹤。編輯器

git clone

  1. 若是你想得到一份已經存在了的 Git 倉庫的拷貝,好比說,你想爲某個開源項目貢獻本身的一份力,這時就要用到 git clone 命令。
  • 若是你對其它的 VCS 系統(好比說 Subversion)很熟悉,請留心一下你所使用的命令是"clone"而不是"checkout"。 這是 Git 區別於其它版本控制系統的一個重要特性,Git 克隆的是該 Git 倉庫服務器上的幾乎全部數據,而不是僅僅複製完成你的工做所須要文件。
  • 當你執行 git clone 命令的時候,默認配置下遠程 Git 倉庫中的每個文件的每個版本都將被拉取下來。 事實上,若是你的服務器的磁盤壞掉了,你一般可使用任何一個克隆下來的用戶端來重建服務器上的倉庫 (雖然可能會丟失某些服務器端的鉤子(hook)設置,可是全部版本的數據仍在.
  • 克隆倉庫的命令是 git clone < url >
  • 克隆遠程倉庫的時候,自定義本地倉庫的名字 git clone < url > newname

git status

  1. 能夠用 git status 命令查看哪些文件處於什麼狀態。
  2. git status --short 獲得一種格式更爲緊湊的輸出

git add

  1. 跟蹤一個未跟蹤的文件。
  2. 將跟蹤的文件放入暫存區

.gitignore

通常咱們總會有些文件無需歸入 Git 的管理,也不但願它們總出如今未跟蹤文件列表。 一般都是些自動生成的文件,好比日誌文件,或者編譯過程當中建立的臨時文件等。 在這種狀況下,咱們能夠建立一個名爲 .gitignore 的文件,列出要忽略的文件的模式。函數

*.[oa]
*~

第一行告訴 Git 忽略全部以 .o 或 .a 結尾的文件。
第二行告訴 Git 忽略全部名字以波浪符(~)結尾的文件,許多文本編輯軟件(好比 Emacs)都用這樣的文件名保存副本。
文件 .gitignore 的格式規範以下:工具

  • 全部空行或者以 # 開頭的行都會被 Git 忽略。
  • 可使用標準的 glob 模式匹配,它會遞歸地應用在整個工做區中。
  • 匹配模式能夠以(/)開頭防止遞歸。
  • 匹配模式能夠以(/)結尾指定目錄。
  • 要忽略指定模式之外的文件或目錄,能夠在模式前加上歎號(!)取反。

git diff

  1. 不加參數直接輸入 git diff : 還沒有暫存的文件更新了哪些部分
  2. git diff --staged : 已暫存文件與最後一次提交的文件差別
  3. git diff --cached : --staged 和 --cached 是同義詞
  4. git diff --check : 它將會找到可能的空白錯誤並將它們爲你列出來

git commit

  1. git commit -m 「message」: 提交代碼
  2. 請記住,提交時記錄的是放在暫存區域的快照。 任何還未暫存文件的仍然保持已修改狀態,能夠在下次提交時歸入版本管理。 每一次運行提交操做,都是對你項目做一次快照,之後能夠回到這個狀態,或者進行比較。
  3. git commit -m -a 「message」: 儘管使用暫存區域的方式能夠精心準備要提交的細節,但有時候這麼作略顯繁瑣。 Git 提供了一個跳過使用暫存區域的方式, 只要在提交的時候,給 git commit 加上 -a 選項,Git 就會自動把全部已經跟蹤過的文件暫存起來一併提交。
  4. git commit -amend: 修改提交

git rm

  1. git rm file: 從已跟蹤文件清單中移除(確切地說,是從暫存區域移除), 並連帶從工做目錄中刪除指定的文件
  2. git rm -f file: 若是要刪除以前修改過或已經放到暫存區的文件,則必須使用強制刪除選項 -f(譯註:即 force 的首字母)
  3. git rm --cached file: 讓文件保留在磁盤,可是並不想讓 Git 繼續跟蹤。

git mv

  1. git mv README.md README 至關於
mv README.md README
git rm README.md
git add README

不像其它的 VCS 系統,Git 並不顯式跟蹤文件移動操做。 若是在 Git 中重命名了某個文件,倉庫中存儲的元數據並不會體現出這是一次更名操做。 不過 Git 很是聰明,它會推斷出究竟發生了什麼。fetch

git log

  1. 在提交了若干更新,又或者克隆了某個項目以後,你也許想回顧下提交歷史。 完成這個任務最簡單而又有效的工具是 git log 命令
  • git log --patch, 它會顯示每次提交所引入的差別(按 補丁 的格式輸出), 你也能夠限制顯示的日誌條目數量,例如使用 -2 選項來只顯示最近的兩次提交: git log -p -2
  • git log --stat, 每次提交的簡略統計信息, 可使用 --stat 選項
  • git log --relative-date, 使用較短的相對時間而不是完整格式顯示日期(好比「2 weeks ago」)
  • git log --name-status, 顯示新增、修改、刪除的文件清單
  • git log -oneline, --pretty=oneline --abbrev-commit 合用的簡寫。
  • git log --author author_name, 顯示指定做者的提交
  • git log --grep, 搜索提交說明中的關鍵字
  • git log -S function_name, 只會顯示那些添加或刪除了該字符串的提交, 假設你想找出添加或刪除了對某一個特定函數的引用的提交,能夠調用
  • 以上的夠用了,更多的https://git-scm.com/book/zh/v2/Git-基礎-查看提交歷史

git reset

  1. git reset HEAD [< file >], 取消暫存的文件

git stash

但願回到之前的版本,但又不想把現有的代碼提交。url

  1. git stash 建立臨時工做去
  2. git stash list 查看保存的工做區
  3. git stash apply stash@{1} 應用哪一個工做區
  4. git stash pop 應用上一個工做區而且刪除
  5. git stash drop stash@{0} 刪除指定的工做區
  6. git stash clear 刪除全部的工做區

git checkout

  1. git checkout – < file >, 請務必記得 git checkout – < file > 是一個危險的命令。 你對那個文件在本地的任何修改都會消失——Git 會用最近提交的版本覆蓋掉它。 除非你確實清楚不想要對那個文件的本地修改了,不然請不要使用這個命令。

git stash

  1. git stash: 建立保存臨時工做區
  • git stash list: 查看保存的工做區
  • git stash apply stash@{1}: 應用哪一個工做區
  • git stash pop: 應用上一個工做區而且刪除
  • git stash drop stash@{0}: 刪除指定的工做區
  • git stash clear: 刪除全部的工做區

git remote

  1. 運行 git remote 命令, 它會列出你指定的每個遠程服務器的簡寫。
  2. git remote -v, 會顯示須要讀寫遠程倉庫使用的 Git 保存的簡寫與其對應的 URL
  3. git remote add < shortname > < url >, 添加一個新的遠程 Git 倉庫,同時指定一個方便使用的簡寫
  4. git remote show < remote >, 查看某一個遠程倉庫的更多信息
  5. git remote rename, 修改一個遠程倉庫的簡寫名

    • git remote rename pb paul,將 pb 重命名爲 paul
  6. git remote remove, 移除一個遠程倉庫

    • 你已經從服務器上搬走了或再也不想使用某一個特定的鏡像了
    • 又或者某一個貢獻者再也不貢獻了——可使用 git remote remove 或 git remote rm

git fetch

  1. git fetch < remote >, 這個命令會訪問遠程倉庫,從中拉取全部你尚未的數據, 執行完成後,你將會擁有那個遠程倉庫中全部分支的引用,能夠隨時合併或查看。

    • 若是你使用 clone 命令克隆了一個倉庫,命令會自動將其添加爲遠程倉庫並默認以 「origin」 爲簡寫。 因此,git fetch origin 會抓取克隆(或上一次抓取)後新推送的全部工做。
    • 必須注意 git fetch 命令只會將數據下載到你的本地倉庫——它並不會自動合併或修改你當前的工做。 當準備好時你必須手動將其合併入你的工做。

git push

  1. git push origin master, 只有當你有所克隆服務器的寫入權限,而且以前沒有人推送過期,這條命令才能生效。 當你和其餘人在同一時間克隆,他們先推送到上游而後你再推送到上游,你的推送就會毫無疑問地被拒絕。 你必須先抓取他們的工做並將其合併進你的工做後才能推送。

git tag

  1. git tag --lits, 列出已有的標籤

    • git tag -l 「v1.8.5*」, 你也能夠按照特定的模式查找標籤。 例如,Git 自身的源代碼倉庫包含標籤的數量超過 500 個。 若是隻對 1.8.5 系列感興趣,能夠運行 git tag -l 「v1.8.5*」
  • git tag -a v1.4 -m 「my version 1.4」, 建立附註標籤(annotated)

    • git show v1.4, 標籤信息和與之對應的提交信息
  • git tag v1.4-lw, 建立輕量標籤(lightweight)

    • 輕量標籤本質上是將提交校驗和存儲到一個文件中——沒有保存任何其餘信息
    • 建立輕量標籤,不須要使用 -a、-s 或 -m 選項,只須要提供標籤名字
  • 後期打標籤

    • git tag -a v1.2 9fceb02, 要在那個提交上打標籤,你須要在命令的末尾指定提交的校驗和(或部分校驗和)
  • 共享標籤

    • git push origin < tagname >, 默認狀況下,git push 命令並不會傳送標籤到遠程倉庫服務器上。 在建立完標籤後你必須顯式地推送標籤到共享服務器上
    • git push origin --tags, 若是想要一次性推送不少標籤,也可使用帶有 --tags 選項的 git push 命令。 這將會把全部不在遠程倉庫服務器上的標籤所有傳送到那裏
    • 使用 git push < remote > --tags 推送標籤並不會區分輕量標籤和附註標籤, 沒有簡單的選項可以讓你只選擇推送一種標籤。
  • git tag -d < tagname >, 刪除掉你本地倉庫上的標籤

    • 注意上述命令並不會從任何遠程倉庫中移除這個標籤,你必須用 git push < remote > :refs/tags/< tagname > 來更新你的遠程倉庫, 上面這種操做的含義是,將冒號前面的空值推送到遠程標籤名,從而高效地刪除它。
    • 第二種更直觀的刪除遠程標籤的方式是: git push origin --delete < tagname >

git 分支

git 分支工做原理: https://git-scm.com/book/zh/v2/Git-分支-分支簡介

git branch

  1. git branch, 獲得當前全部分支

    • git branch -v, 查看每個分支的最後一次提交
    • git branch --merged, 查看哪些分支已經合併到當前分支
    • git branch --no-merged, 查看哪些分支還沒有合併到當前分支
    • git branch --no-merged master,查看哪些分支還沒有合併到master分支
  • git branch < name >, 建立分支,爲你建立了一個能夠移動的新的指針
  • git branch -d < branchname >, 刪除分支
  • git branch -u origin/serverfix, 設置已有的本地分支跟蹤一個剛剛拉取下來的遠程分支,或者想要修改正在跟蹤的上游分支, 你能夠在任意時間使用 -u 或 --set-upstream-to 選項運行 git branch 來顯式地設置
  • git branch -vv, 若是想要查看設置的全部跟蹤分支, 這會將全部的本地分支列出來而且包含更多的信息,如每個分支正在跟蹤哪一個遠程分支與本地分支是不是領先、落後或是都有。

    • 須要重點注意的一點是這些數字的值來自於你從每一個服務器上最後一次抓取的數據。 這個命令並無鏈接服務器,它只會告訴你關於本地緩存的服務器數據。 若是想要統計最新的領先與落後數字,須要在運行此命令前抓取全部的遠程倉庫。 能夠像這樣作:git fetch --all; git branch -vv
  • git branch -f master HEAD~3

git checkout

  1. git checkout master, 這條命令作了兩件事。

    • 一是使 HEAD 指回 master 分支
    • 二是將工做目錄恢復成 master 分支所指向的快照內容
  2. git checkout -b < newbranchname >, 建立一個新分支後當即切換過去
  3. git checkout -b < branch > < remote >/< branch >, 建立一個新分支後當即切換過去, 而且跟蹤遠程倉庫的分支

git merge

  1. git merge < branchname >, 在當前分支合併另外一個分支的修改

    • 當你試圖合併兩個分支時, 若是順着一個分支走下去可以到達另外一個分支,那麼 Git 在合併二者的時候, 只會簡單的將指針向前推動(指針右移),由於這種狀況下的合併操做沒有須要解決的分歧——這就叫作 「快進(fast-forward)」

git add

  1. 合併時把有衝突的文件標記爲已解決狀態

git push

  1. git push origin --delete < branchname >, 刪除遠程分支

git rebase 變基

詳情: https://git-scm.com/book/zh/v2/Git-分支-變基

如何避免每次輸入密碼

  1. git config --global credential.helper cache, 若是你正在使用 HTTPS URL 來推送,Git 服務器會詢問用戶名與密碼。 默認狀況下它會在終端中提示服務器是否容許你進行推送。
    若是不想在每一次推送時都輸入用戶名與密碼,你能夠設置一個 「credential cache」。 最簡單的方式就是將其保存在內存中幾分鐘,能夠簡單地運行 git config --global credential.helper cache 來設置它。
    在這裏插入圖片描述
相關文章
相關標籤/搜索