git相关学习

前言

When we learn a new technology,we need to know what it is,why we learn it and how to use it best

git底层命令

公共命令
  1. git cat-file -p hash 拿对应哈希对象的内容
  2. git cat-file -t hash 拿对应哈希对象的类型
  3. git ls-files -s 查看暂存区的状态
git对象(blob对象)

git hash-object -w fileUrl 生产key(hash值)-value(压缩过的文件内容)键值对 并存在.git/objects、

tree对象
  1. git update-index --add -cacheinfo 10064 hash 文件名 往暂存区添加一条记录(让git对象对应上文件名) ./git/index

  2. git write-tree 生成树对象

commit对象

echo “first commit” | git commit-tree treehash ./git/object

查看暂存区

git ls-files -s

git高层命令(CRUD)

  1. git --version 查看git版本
  2. git config --global user.name “name” 初始化用户名
  3. git config --global user.email “email” 初始化邮箱
  4. git init 初始化仓库
  5. git status 查看文件的状态
  6. git diff 查看哪些修改还没有暂存
  7. git diff --staged 查看哪些修改已经被暂存了 还没有修改
  8. git log --oneline 查看提交的历史记录
  9. git add ./ 将修改提交到暂存区
  10. git commit (-a) (-m “提交信息”) 将暂存区提交到版本库

git高层命令(分支)

  1. 分支的本质就是一个提交对象
  2. HEAD是一个指针,它默认指向master分支,切换分支时就是让HEAD指向不同的分支。每一次有新的提交,HEAD指针就会带着分支一起向前走
  3. git branch 显示分支列表
  4. git branch -d 分支名 删除空的分支和已经被合并的分支
  5. git branch -D 分支名 强制删除分支(自己不能删自己)
  6. git branch -v 查看当前分支指向的提交对象
  7. git branch 分支名 在当前提交对象创建分支
  8. git branch 分支名 commit哈希值 在指定提交对象创建分支(版本穿梭)
  9. git checkout 分支名 切换分支
  10. git merge 分支名 快进合并/并行合并

git高层命令(撤销重置)

1. 工作区

git checkout – 撤销工作区里的文件修改

2. 暂存区

git reset HEAD 撤销暂存区里的文件修改

3. 版本库

重写提交注释 git commit -amend

git高层命令(其他)

  1. git log --oneline --decorate --graph --all 查看项目分叉历史记录
  2. git config --global alias.别名 ”git后面的命令“ 为git命令配别名
  3. git config --global unset 配置key 删除全局配置信息
  4. git rebase
  5. git reset 哈希/路径
    1. –soft HEAD~/提交对象哈希 HEAD带着分支一起动 ( -amend)
    2. –mixed HEAD~/提交对象哈希值 HEAD带着分支一起动/暂存区也变化 (git reset HEAD )
    3. –hard HEAD~/ HEAD带着分支一起动/暂存区也变化/工作区也变化 (git checkout)
    4. HEAD filename 撤销文件操作
  6. git cherry-pick
  7. git reflog 查看HEAD节点的变化记录
  8. git restore
  9. git switch

其他

  1. 每一次切换分支时,工作目录一定要干净(处于已提交状态,可以用git status查看)

情景

  1. 紧急情况 急修修复bug
  2. 工作情况下 修复平常bug
  3. 长期分支(master,develop)
  4. 特性分支(topic)

git checkout vs git reset --hard

  1. checkout只动HEAD,HEAD动HEAD和带着分支一起走
  2. checkout对工作目录是安全的,而–hard是强制覆盖工作目录的(有丢失数据的风险)

tag(Head不动)相关操作

  1. git tag
  2. git tag 标签名 (创建标签)
  3. git show 标签名 (查看标签)
  4. git tag -d 标签名 (删除标签)
  5. git checkout 标签名 (切换分支)

数据恢复

  1. git reflog 追踪最后一次提交的哈希
  2. 利用该哈希创建新的分支 recovery-branch
  3. 少用硬重置,多用分支

特点

  1. 直接记录快照,而非差异比较
  2. 近乎所有的操作都是本地执行
  3. 时刻保持数据完整性
  4. 多数操作仅添加数据
  5. 文件有三种状态(已暂存,已修改,已提交)

远程合作开发

  1. windows凭据管理器

  2. git remote -v 查看本地仓库远程的仓库情况

  3. git remote add 仓库别名 hostUrl

  4. git config user.name 用户信息 配置该仓库用户信息

  5. git config user.email 用户邮箱 配置该仓库用户信息

  6. git push 仓库别名 分支名

  7. git push -u 仓库别名 分支名

  8. git fetch 远程仓库名称 将数据从远程分支拉到远程跟踪分支

  9. git pull 更新本地分支与远程分支同步

  10. git clone 仓库地址

  11. git checkout --track 远程跟踪分支名 // git checkout -b 本地分支名 远程跟踪分支名 (创建分支并跟踪对应的远程跟踪分支)

  12. git branch -u 远程跟踪分支名 (已存在的分支去跟踪对应的远程跟踪分支名)

  13. git branch --v 查看本地分支和远程跟踪分支的跟踪情况

  14. git push origin --delete 远程分支名 删除远程分支

  15. git remote prune origin --dry-run 列出人在远程跟踪但是远程仓库分支已不存在的

  16. git remote prune origin 清除上面命令列出来的远程跟踪分支

  17. 分支类型

    1. 远程分支
    2. 远程跟踪分支
    3. 本地分支

分支合并冲突

  1. 本地冲突(典型合并的时候)

  2. 远程冲突(push,pull)

  3. 如果出现了远程分支冲突,一定要和冲突者协商冲突部分该如何处理

Github 删除tag

git tag -d <tagname>
git push origin :refs/tags/<tagname>

Github 推送tag

git push --tags

概念

  1. git对象,tree对象,commit对象

  2. 工作区,暂存区,版本库

  3. 本地分支(git branch),远程跟踪分支(git push),远程分支

  4. 远程协作的基本流程

做跟踪

  1. 克隆仓库时,会自动为master做跟踪

  2. 本地没有分支

    git checkout --track 远程跟踪分支(remote/分支名)

  3. 本地已经创建分支

    git branch -u 远程跟踪分支(remote/分支名)

推送

​ git push(当本地分支有远程跟踪分支才能直接使用,否则要指定远程仓库的分支)

拉取

​ git pull(当本地分支有远程跟踪分支才能直接使用,否则要指定远程仓库的分支)

SSH

  1. ssh-keygen -t rsa -C 邮箱: 生成公私钥
发布了26 篇原创文章 · 获赞 1 · 访问量 1206

猜你喜欢

转载自blog.csdn.net/bleeding_sky/article/details/104081857
今日推荐