git配置user信息
- $ git config --global user.name 'your_name'
- $ git config --global usernemail 'your_email@domain.com'
git config的是三個做用域
缺省等同於localhtml
- git config --local: 只對某個倉庫有效
- git config --global: 對當前用戶全部倉庫有效
- git config --system: 對系統全部登陸的用戶有效
顯示config的配置:
- git config --list --local
- git config --list --global
- 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查看版本演變歷史
- git log查看當前分支的詳細commit記錄
- git log --oneline: 查看commit的記錄列表(簡潔)
- git log -n4: 查看最近的4次記錄(-n後面跟着的數字可自定義)
- git log --all查看全部分支的commit記錄
- git log --graph: 圖形化
查看分支
- git branch -v 查看本地全部分支
- git branch -av 查看本地和遠端全部分支
深刻.git文件夾探個究竟
- git cat-file -t <hash>: 查看文件類型
- git cat-file -p <hash>: 查看文件內容
- HEAD文件: cd .git & cat HEAD, 保存了當前所在分支
- config文件: cat .git/config, 當前項目的git配置
- objects文件夾: 存放了文件的內容
git核心對象
- commit
- tree
- blob
HEAD指向什麼
- HEAD能夠指向當前分支, 然而經過查看分支的內容(cat .git/refs/heads/<branch_name>)實際上是一個hash, 經過git cat-file -t <hash>能夠知道該hash是一個commit, 因此HEAD最終仍是指向一個commit
- 若是是分離頭指針狀況下(git checkout <commit_hash>),HEAD能夠指向當前commit
經過HEAD比較2個commit的差別(git diff)
- git diff <commit_hash1> <commit_hash2>, 這是普通寫法
- git diff HEAD HEAD^
- git diff HEAD HEAD^1, 1能夠省略
- git diff HEAD HEAD~1, HEAD~1至關於HEAD^
- git diff HEAD HEAD^^
- git diff HEAD HEAD~2 HEAD^ HEAD~1至關因而當前commit的父commit
刪除不須要的分支
- git branch -d <branch_name>: 會由於分支還沒合併等緣由沒法刪除
- git branch -D <branch_name>: 強制刪除, 須要事先確認風險
修改commit的message
- 修改最近一次commit的message: git commit --amend, 而後點擊鍵盤i鍵入INSERT模式, 編輯完成後輸入'wq!'確保寫入並退出
- 修改老舊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所含文件的差別
- git diff
- git diff -- [filename] [filename]: 表示只對比某個文件或指定的多個文件
讓暫存區恢復成和HEAD同樣
git reset HEADui
讓工做區恢復成和暫存區同樣(撤銷修改)
- 已修改, 未暫存(還未add)
git checkout .
git checkout -- [filename]
git reset --hard
複製代碼
- 已暫存, 未提交(已add, 但還未commit)
git reset
git checkout .
複製代碼
或者spa
git reset --hard
複製代碼
- 已提交未推送(已add && commit, 但未push)
git reset --hard origin/master
複製代碼
- 已推送(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的差別
- git diff <branch_A> <branch_B> -- <filename>
- git diff <commit_A> <commit_B> -- <filename>
刪除文件
git rm <filename>
臨時存儲文件
- git stash
- git stash list: 查看存儲的堆棧
- git stash apply: 將以前存儲的內容彈出, 可是stash list的堆棧中內容依舊在
- git stash pop: 講以前存儲的內容彈出, 可是stash list的堆棧中內容也一併刪除
指定不須要git管理的文件 .gitignore
- node_modules: 表示忽略node_modules文件或者node_modules文件夾下的全部文件
- node_modules/: 表示忽略node_modules文件夾下的全部文件
- 後面加不加'/'仍是有點區別的
github淘項目
- 在輸入框寫入關鍵字後, 再加上in:readme表示在readme文件中查找關鍵字; stars:>1000 舉個例子: 'Flutter project in:readme starts:>1000'
- 'code'+'code' filename:<filename>: 這種方式能夠搜代碼