你也许会用得着的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>: 这种方式能够搜代码
相关文章
相关标签/搜索