git-repolinux
基本涵蓋了在開發中用到的git命令,能知足平常需求。git
# 查看全局配置列表
git config -l
# 查看局部配置列表
git config --local --list
# 查看已設置的全局用戶名/郵箱
git config --global --get user.name
git config --global --get user.email
# 設置全局用戶名/郵箱
git config --global user.name "xiejiahe"
git config --global user.email "example@example.com"
# 設置本地當前工做區倉庫用戶名/郵箱
git config --local user.name "xiejiahe"
git config --local user.email "example@example.com"
# 將默認文本編輯器設置爲 emacs
git config --global core.editor emacs
# 將默認差別化分析工具設置爲 vimdiff
git config --global merge.tool vimdiff
複製代碼
# 一、粘貼如下命令,替換爲您的GitHub電子郵件地址
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 二、當提示「輸入要在其中保存密鑰的文件」時,按Enter。接受默認文件位置。
> Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]
# 三、在提示符下,鍵入一個安全密碼。
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
複製代碼
最後須要將生成的 SSH Key 添加到 ssh config
中github
# 一、編輯
vim ~/.ssh/config
# 二、粘貼下面到 config 文件中
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
複製代碼
git init
建立一個空的Git倉庫或從新初始化一個現有的倉庫vim
# 會在當前目錄生成.git
git init
# 以安靜模式建立,只會打印錯誤或警告信息
git init -q
# 建立一個裸倉庫, 咱們通常不會用到這個命令
git init --bare
複製代碼
# 完整查看文件狀態
git status
# 以短格式給出輸出
git status -s
# 忽略子模塊
git status --ignore-submodules
複製代碼
# 查看完整歷史提交記錄
git log
# 查看前N次提交記錄 commit message
git log -2
# 查看前N次提交記錄,包括diff
git log -p -2
# 搜索關鍵詞
git log -S Java
# 只顯示合併日誌
git log --merges
# 以圖形查看日誌記錄, --oneline 可選
git log --graph --oneline
# 列出提交者貢獻數量, 只會打印做者和貢獻數量
git shortlog -sn
# 以提交貢獻數量排序並打印出message
git shortlog -n
# 採用郵箱格式化的方式進行查看貢獻度
git shortlog -e
# 查看 README.md 文件的修改歷史記錄,包括時間、做者以及內容
git blame README.md
複製代碼
# https 協議
git clone https://github.com/xjh22222228/git-manual.git
# SSH協議
git clone git@github.com:xjh22222228/git-manual.git
# 克隆某個分支, -b 指定分支名字
git clone -b master https://github.com/xjh22222228/git-manual.git
# 遞歸克隆,若是項目包含子模塊就很是有用
git clone --recursive git@github.com:xjh22222228/git-manual.git
# 克隆深度爲1, 不會把歷史的記錄也克隆,這樣能夠節省克隆時間
git clone --depth=1 https://github.com/xjh22222228/git-manual.git
複製代碼
# 查看全部分支
git branch --all
# 查看本地分支
git branch
# 查看遠端分支
git branch -r
複製代碼
# 2種方法,切換到master分支
git checkout master
git switch master
# 切換上一個分支
git checkout -
# 切換遠端分支
git checkout -t origin/dev
複製代碼
# 建立develop分支
git branch develop
# 建立develop分支並切換
git checkout -b develop
# 建立一個空的分支, 不繼承父分支,歷史記錄是空的,通常至少須要執行4步
git checkout --orphan develop
# 這一步可選,若是你真的想建立一個沒有任何文件的分支
git rm -rf .
# 添加並提交,不然分支是隱藏的 (執行這一步以前須要注意當前工做區必須保留一個文件,不然沒法提交)
git add -A && git commit -m "提交"
# 推送到遠程
git push --set-upstream origin develop
複製代碼
# 刪除本地分支
git branch -d <branchName>
# 刪除遠程分支
git branch -d -r origin/<branchName>
git push origin :<branchName>
複製代碼
# 重命名當前分支
git branch -m <branchName>
複製代碼
# 兩步法, 將 feature/v1.0.0 分支代碼合併到 develop
git checkout develop
git merge feature/v1.0.0
# 或者一步法
git merge feature/v1.0.0 develop
複製代碼
# 暫存全部
git add -A
# 暫存某個文件
git add ./README.md
# 添加當前目錄全部改動文件
git add .
# 暫存一系列文件
git add 1.txt 2.txt ...
複製代碼
git add 的反向操做windows
# 刪除1.txt 文件
git rm 1.txt
複製代碼
# -m 提交的信息
git commit -m "changes log"
# 提交併顯示diff變化
git commit -v
# 容許提交空消息,一般必須指定 -m 參數
git commit --allow-empty-message
# 重寫上一次提交信息,確保當前工做區沒有改動
git commit --amend -m "新的提交信息"
複製代碼
# 推送內容到主分支
git push -u origin master
# 本地分支推送到遠程, 本地分支:遠程分支
git push origin <branchName>:<branchName>
# 簡寫,默認推送當前分支
git push
# 強制推送, -f 是 --force 縮寫
git push -f
複製代碼
# 推薦,由於不會作自動合併
git fetch origin master
# 至關於git fetch 而後 git merge
git pull
# 後面的意思是: 遠程分支名:本地分支名
git pull origin master:master
# 若是是要與本地當前分支合併,則冒號後面的<本地分支名>能夠不寫
git pull origin master
複製代碼
# 查看全部文件改動
git diff
# 查看具體文件的改動
git diff README.md
# 查看某個版本的改動, 後面那一竄是commitId, git log後就能看到
git diff d68a1ef2407283516e8e4cb675b434505e39dc54
# 查看某個文件的歷史修改記錄
git log README.md
git show d68a1ef2407283516e8e4cb675b434505e39dc54 README.md
複製代碼
# 回滾上一個版本
git reset --hard HEAD^
# 回滾上兩個版本
git reset --hard HEAD^^
# 回退到指定版本,git log 就能看到commit id了
git reset --hard 'commit id'
# 回滾版本是不保存在 git log,若是想查看使用
git reflog
複製代碼
# 撤銷當前目錄下全部文件的改動
git checkout -- .
# 撤銷指定文件修改
git checkout -- README.md
# 暫存區回到工做區, 指定 ./README.md 文件從暫存區回到工做區
git reset HEAD ./README.md
# 撤銷commit, 回到工做區, 通常commit id 是前一個
git reset <commit_id>
# 撤銷commit, 而且把修改同時撤銷
git reset --hard <commit_id>
複製代碼
# 列出本地全部標籤
git tag
# 列出遠程全部標籤
git ls-remote --tags origin
# 按照特定模式查找標籤, `*` 模板搜索
git tag -l "v1.0.0*"
# 建立帶有附註標籤
git tag -a v1.1.0 -m "標籤描述"
# 建立輕量標籤, 不須要帶任何參數
git tag v1.1.0
# 後期打標籤, 假設以前忘記打標籤了,能夠經過git log查看commit id
git log
git tag -a v1.1.0 <commit_id>
# 推送到遠程,默認只是本地建立
git push origin v1.1.0
# 一次性推送全部標籤到遠程
git push origin --tags
# 刪除標籤, 你須要再次運行 git push origin v1.1.0 才能刪除遠程標籤
git tag -d v1.1.0
# 刪除遠程標籤
git push origin --delete v1.1.0
# 檢查標籤
git checkout v1.1.0
# 查看本地某個標籤詳細信息
git show v1.1.0
複製代碼
git rebase
主要做用能夠將多個commit記錄合併爲一條緩存
# 操做最近4次提交
git rebase -i HEAD~4
# 或者以 commit_id 進行操做
git rebase -i e88835de905ad396f61a0dc8c040a8ac8a34f3f8
# 放棄 git rebase 操做
git rebase --abort
# 此命令主要用於解決衝突後繼續執行
git rebase --continue
複製代碼
Git Flow 不是內置命令,須要單獨安裝bash
初始化 每一個倉庫都必須初始化一次ssh
# 一般直接回車以完成默認設置
git flow init
複製代碼
功能編輯器
# 開啓新的功能
git flow feature start v1.1.0
# 推送到遠程, 在團隊協做中這一步少不了
git flow feature publish v1.1.0
# 完成功能, 會將當前分支合併到 develop 而後刪除分支,回到 develop
git flow feature finish v1.1.0
複製代碼
打補丁
hotfix是針對 master
進行打補丁的
# 開啓新的 hotfix
git flow hotfix start v1.1.0_hotifx
# 推送到遠程
git flow hotfix publish v1.1.0_hotifx
# 完成新的hotfix, 將當前分支合併到 master 和 develop,而後刪除分支,回到 develop
git flow hotfix finish v1.1.0_hotifx
複製代碼
發佈
# 開啓新的 release
git flow release start v1.1.0
# 推送到遠程
git flow release publish v1.1.0
# 完成, 將當前分支合併到 master 和 develop,刪除當前分支而後回到 develop
git flow release finish v1.1.0
複製代碼
具體使用還能夠看這裏 git submodule子模塊使用教程
# 添加子模塊
git submodule add https://github.com/xjh22222228/git-manual.git
# 更新,有2種方法
# 一步到位
git submodule update --remote
# 或者進入到子模塊項目再拉取
git pull
# 修復子模塊分支指向 detached head
git submodule foreach -q --recursive 'git checkout $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'
# 刪除子模塊 common 爲子模塊名稱,通常刪除須要三部
git submodule deinit <common>
#清除子模塊緩存
git rm --cached common
# 提交代碼並推送
git commit -am "Remove a submodule" && git push
複製代碼
# 詳細打印全部git命令
git help
# 打印全部git命令, 此命令不會有詳細信息,更清晰一些
git help -a
# 列出全部可配置的變量
git help -c
複製代碼
# 查看git版本
git --version
# 查看遠程倉庫地址
git remote -v
# 記住提交帳號密碼
git config --global credential.helper store
# 清除git已保存的用戶名和密碼
# windows
git credential-manager uninstall
# mac linux
git config --global credential.helper ""
# 或者
git config --global --unset credential.helper
# 清除本地git緩存
git rm -r --cached .
複製代碼
以爲不錯的能夠給個Star鼓勵下做者 git-manual