Git备忘录

123 阅读3分钟

介绍

  • Linux社区设计完成
  • 分布式版本控制

命令

  • 设置用户名和邮箱

    - git config --global user.name "xxx"
    - git config --global user.email "xxx"
    
  • 查看当前配置

    -  git config --list
    
  • 设置别名

    -  git config --global alias.co checkout
    
  • 文件状态划分

    1. 未跟踪: 默认情况下,git仓库下的文件没有添加到git仓库的管理中,我们需要通过add命令来操作
    2. 已跟踪
      1. staged: 暂缓区的文件状态,执行了add后的文件就放在索引区了
      2. Unmodified:执行完commit命令后的文件状态
      3. Modified:修改了添加过暂缓区的文件,会变成该状态
    3. 总结:git add会把文件状态变为staged,git commit 会将文件变成Unmodified,然后修改了文件内容,状态会变为Modified状态
  • 什么是校验和

    • git中所有的数据在存储前都进行计算校验和,然后以校验和来引用
    • 作为本次提交的唯一commit id
    • 通过校验和作为索引找到本次都修改了什么文件
    • 40位的hash值
  • 输出日志

    • git log
    - git log --pretty=oneline
    - git log --pretty=oneline --graph 图结构的形式展示,在多个分支并且合并过后有用
    
    • git reflog : 记录全部的操作,即使你reset回退的
  • 版本回退

    • git reset
    • head指向该分支上最后一次提交
    • HEAD^ 上一个版本 HEAD^^ 上2个版本 HEAD~1000 上1000个版本
    • git reset --hard HEAD^
    • git reset --hard commitId
  • 管理远程服务器

    • 如果本次已经有代码,然后创建了远程仓库那么想要关联这两个仓库的代码需要操作
    • git branch --set-upstream-to=origin/master 先把本地和远程做一个跟踪处理/这个也可以用git branch --track 本地分支 orgin/远程分支 来实现
    • git pull --allow-unrelated-histories 允许两个没有共同基础的分支进行合并
    • git checkout -b main --track origin/main: -b main 可省略,意思是创建一个本地main分支,并且追踪origin的main分支
  • 推送

    • git push origin master:main 将本地master分支推送到远程origin的main分支上
  • 如果要本地分支追踪的上流分支名字不一致

    • 需要修改配置
    • git config push.default upstream : push的时候找上流追踪的分支
    • 这个配置默认是simple: 代表push的时候默认找相同的名字,找不到就报错
    • Git config push.default current :代表push的时候默认找相同的名字,找不到就直接创建该名字的远程分支
  • 合并

    - git pull 等于 git fetch + git merge
     - git fetch只是将代码拉取下来,放在object中,然后git merge 才能合并看到代码
    
  • git原理

    • git cat-file(去object下查看文件) -t(查看文件类型) 文件夹名+文件名前几位
    • git cat-file(去object下查看文件) -p(查看文件内容) 文件夹名+文件名前几位
    • git add的时候将文件添加到暂缓区,此时并没有commit对象可以找到他们
    • 每一次commit提交都是一个commit对象,是树结构
    • 在.git下的objects有一个文件(该文件就是git log打印出来的commit id,前两位是文件夹的名字,后面是文件名字)保存着一次commit的信息:有tree的索引,根据tree索引找到文件里,保存这修改的文件和文件修改对应的文件
  • rebase

    • git rebase master :将master分支作为base,然后将当前dev分支的修改放到master后面,这样master的分支不会乱
    • 会找到当前分支跟master的共同祖先,然后dev分支后面的修改都移动到master最后一次提交的后面
    • 不要在master分支或者主分支上使用rebase