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>: 这种方式能够搜代码