Git

Git

前置知识

分支:一个指向特定提交记录的引用

指针:当前操作位置的引用

本地指针:我们能操作位置的引用

基本操作
  1. 拉取分支

    git clone [url] <目录名>

  2. 推送变更到远程仓库

    git push

    注意:如上图所示,将 4 推送到仓库需要 remote 仓库的 HEAD 指向非 master 分支或指向 hash

  3. 将远端镜像更新到本地【注:本地head指向并没有发生改变】

    git fetch

    需要手动合并分支:git merge origin/[分支名]

  4. 获取变更并合并【注:本地head会指向最新变更】

    git pull

    相当于:git fetchgit merge origin/[分支名]

  5. 分支

    创建分支:git branch [分支名]

    切换分支:git checkout [分支名]

    HEAD指向提交记录:git checkout [hash]/--detach,该操作会直接让HEAD直接指向hash

    创建分支并切换:git checkout <远程分支名> -b [分支名]

    删除分支:git branch -d [分支名]

    切换远程分支:git checkout [远程分支名],注意该切换会直接将HEAD指针指向hash,如下图

  6. 暂存区

    添加到暂存区:git add [文件路径]/[.]

    交互式add,允许提交文件内容的一部分:git add -i

    移除暂存区:git restore --staged [文件路径]/[.]

    还原文件:git restore [文件路径]git checkout [文件路径]

  7. 提交变更

    git commit -m "描述"

    替换最新变更:git commit --amend

    通过 --amend 命令将 master 引用指向新的提交,上图为 4 变更为 4'

    --amend 命令触发 COMMIT_EDITMSG 编辑时,可通过 ESC 推出编辑模式,然后按两次大写 Z退出

  8. 合并分支

    git merge [分支名]

    当merge发生冲突并解决时:git add . 然后 git merge --continue

    Fast-forward合并:git merge [分支名] --no-ff

  9. reset 引用回退

    git reset <mode> [hash]

    mode 类型有:

    • –soft:使分支和HEAD回退到指定commit并保留所有变更在非暂存区
    • –mixed 默认模式:使分支和HEAD回退到指定commit并保留所有变更在暂存区
    • –hard:使分支和HEAD回退到指定commit并移除所有变更

    注意:可以通过reset回退到git reflog里的任意记录

  10. rebase 调整提交过程

    git rebase [分支名]/[hash]

    如果想将branch的提交记录变更为:1 - 2 - 3 - a - 4 - 5 的形式

    通过 git rebase master 进行调整

    rebase 发生冲突并解决时【注:再次冲突重复冲突操作即可】

    git add .

    git rebase --continue

    修改提交历史,即代码有没有冲突,都要求一步一步编辑历史,如:3 - 4 - 5

    git rebase -i [分支名]/[hash]

    会要求对每一步都进行类冲突处理

  11. revert 反向操作,会全部还原成指定hash的前一个提交的状态

    git revert [分支名]/[hash]

  12. 获取其它分支的提交内容

    git cherry-pick [hash1、hash2、hash3]

  13. 查看差异

    git diff:查看未缓存的改动

    git diff --staged:查看缓存区与 HEAD 的改动

    git dif [hash1] [hash2]:对比两次提交的差异

  14. 查看日志

    git log <--oneline> <--pretty=oneline> <--graph> <--all>

  15. 查看状态

    git status

  16. 查看提交的内容

    git show [hash]

  17. 创建 tag

    git tag [tag名称] <-a>

    -a 选项为增加描述

  18. 查看引用历史

    git reflog

配置
  1. 查看配置

    git config --list

  2. 查看用户名

    git config user.name

  3. 查看邮箱

    git config user.email

  4. 全局配置用户名

    git config --global user.name "name"

  5. 全局配置邮箱

    git config --global user.email "eamil@gmail.com"

扩展(得练习并验证)
  1. 给本地仓库添加远程仓库【注:该远程仓库可以是其它本地仓库或其它电脑的仓库】

    git remote add <给个远端仓库名> <名称>@<ip>:<远端仓库目录>

    git push <远端仓库名> <分支>:<分支>:得验证分支到底那个是创建,那个是本地

问题:

提交完发现写错了?

  1. 第一种:刚提交完,发现有错
    • git commit --amend
  2. 第二种:非最新提交,发现有错
    • git rebase [hash]
  3. 第三种:已经push到远程仓库,发现有错
    • git revert [hash]