你也許會用得着的git指令

git配置user信息

  1. $ git config --global user.name 'your_name'
  2. $ git config --global usernemail 'your_email@domain.com'

git config的是三個做用域

缺省等同於localhtml

  1. git config --local: 只對某個倉庫有效
  2. git config --global: 對當前用戶全部倉庫有效
  3. git config --system: 對系統全部登陸的用戶有效

顯示config的配置:

  1. git config --list --local
  2. git config --list --global
  3. git config --list --system

git add將工做目錄中修改過的文件提交到暫存區

git add . 或者 git add -u(update)node

git mv修改工做目錄中某個文件的文件名

git mv <old_file_name> <new_file_name>git

git log查看版本演變歷史

  1. git log查看當前分支的詳細commit記錄
  2. git log --oneline: 查看commit的記錄列表(簡潔)
  3. git log -n4: 查看最近的4次記錄(-n後面跟着的數字可自定義)
  4. git log --all查看全部分支的commit記錄
  5. git log --graph: 圖形化

查看分支

  1. git branch -v 查看本地全部分支
  2. git branch -av 查看本地和遠端全部分支

深刻.git文件夾探個究竟

  1. git cat-file -t <hash>: 查看文件類型
  2. git cat-file -p <hash>: 查看文件內容
  3. HEAD文件: cd .git & cat HEAD, 保存了當前所在分支
  4. config文件: cat .git/config, 當前項目的git配置
  5. objects文件夾: 存放了文件的內容

git核心對象

  1. commit
  2. tree
  3. blob

HEAD指向什麼

  1. HEAD能夠指向當前分支, 然而經過查看分支的內容(cat .git/refs/heads/<branch_name>)實際上是一個hash, 經過git cat-file -t <hash>能夠知道該hash是一個commit, 因此HEAD最終仍是指向一個commit
  2. 若是是分離頭指針狀況下(git checkout <commit_hash>),HEAD能夠指向當前commit

經過HEAD比較2個commit的差別(git diff)

  1. git diff <commit_hash1> <commit_hash2>, 這是普通寫法
  2. git diff HEAD HEAD^
  3. git diff HEAD HEAD^1, 1能夠省略
  4. git diff HEAD HEAD~1, HEAD~1至關於HEAD^
  5. git diff HEAD HEAD^^
  6. git diff HEAD HEAD~2 HEAD^ HEAD~1至關因而當前commit的父commit

刪除不須要的分支

  1. git branch -d <branch_name>: 會由於分支還沒合併等緣由沒法刪除
  2. git branch -D <branch_name>: 強制刪除, 須要事先確認風險

修改commit的message

  1. 修改最近一次commit的message: git commit --amend, 而後點擊鍵盤i鍵入INSERT模式, 編輯完成後輸入'wq!'確保寫入並退出
  2. 修改老舊commit的message: git rebase -i <commit_hash> 可是commit_hash要選擇咱們即將修改的commit的上一個commit. 首先根據咱們要操做的類型選擇command, 如pick reword edit等. 而後':wq!'保存, 此時git會進入下一個操做界面, 這時候纔是真的的修改commit_msg, 輸入'i'編輯完成後保存並退出, 這時候就真正的完成了老舊的commit_msg修改

變基

git rebasegithub

把連續多個commit整理成1個

git rebase -i <commit_hash>, 使用's'選擇要合併的commitshell

把間隔的幾個commit整理成1個

git rebase -i <commit_hash>, 可是須要在INSERT編輯階段, 手動調整commit順序app

比較暫存區和HEAD所含文件的差別

git diff --cacheddom

比較工做區和HEAD所含文件的差別

  1. git diff
  2. git diff -- [filename] [filename]: 表示只對比某個文件或指定的多個文件

讓暫存區恢復成和HEAD同樣

git reset HEADui

讓工做區恢復成和暫存區同樣(撤銷修改)

  1. 已修改, 未暫存(還未add)
git checkout . 
git checkout -- [filename]
git reset --hard
複製代碼
  1. 已暫存, 未提交(已add, 但還未commit)
git reset
git checkout .
複製代碼

或者spa

git reset --hard
複製代碼
  1. 已提交未推送(已add && commit, 但未push)
git reset --hard origin/master
複製代碼
  1. 已推送(add && commit && push)
git reset --hard HEAD^
git push -f
複製代碼

git push -f指令是強制push到遠程倉庫, 理論上應禁止使用指針

取消暫存區部分文件的更改

git reset HEAD -- [filename]

消除最近的幾回提交

git reset --hard <commit_hash>

查看指定文件在2個分支或2個commit的差別

  1. git diff <branch_A> <branch_B> -- <filename>
  2. git diff <commit_A> <commit_B> -- <filename>

刪除文件

git rm <filename>

臨時存儲文件

  1. git stash
  2. git stash list: 查看存儲的堆棧
  3. git stash apply: 將以前存儲的內容彈出, 可是stash list的堆棧中內容依舊在
  4. git stash pop: 講以前存儲的內容彈出, 可是stash list的堆棧中內容也一併刪除

指定不須要git管理的文件 .gitignore

  1. node_modules: 表示忽略node_modules文件或者node_modules文件夾下的全部文件
  2. node_modules/: 表示忽略node_modules文件夾下的全部文件
  3. 後面加不加'/'仍是有點區別的

github淘項目

  1. 在輸入框寫入關鍵字後, 再加上in:readme表示在readme文件中查找關鍵字; stars:>1000 舉個例子: 'Flutter project in:readme starts:>1000'
  2. 'code'+'code' filename:<filename>: 這種方式能夠搜代碼
相關文章
相關標籤/搜索