记录一下git 学习常用命令,以防用时遗忘。

安装后简单配置

    git --global uname  'name'
    git --global email  'example@icloud.com'
    git add demo
    git commit -m 'add demo'
    git log --oneline
    git log --pretty=oneline
    git reset --hard HEAD^  上一个版本   
                     HEAD^^
                     HEAD~100
    Git提供了一个命令git reflog用来记录你的每一次命令

.git 文件目录

     COMMIT_EDITMSG
     config 当前 git 的配置文件
     description (仓库的描述信息文件)
     HEAD (指向当前所在的分支),例如当前在 develop 分支,实际指向地址是 refs/heads/develop
     hooks [文件夹]
     index
     info [文件夹]
     logs [文件夹]
     objects [文件夹] (存放所有的 git 对象,对象哈希值前 2 位为文件夹名称,后 38 位为对象文件名, 
        可通过 git cat-file -p 命令,拼接文件夹名称+文件名查看)
     ORIG_HEAD
     refs [文件夹]
      • heads (存放当前项目的所有分支)
      • tags (存放的当前项目的所有标签,又叫做里程碑)

cat 命令, 功能:用来显示文件。 例如 cat text.md 显示 text.md 文件的内容
ls -al 命令, 表示列出当前目录下的所有文件(包括隐藏文件)
git cat-file -t 命令 , 查看 git 对象的类型
git cat-file -p 命令, 查看 git 对象的内容
git cat-file -s 命令, 查看 git 对象的大小


git checkout commitId:会出现分离头指针的情况,这种情况下比较危险,
因为这个时候你提交的代码没有和分支对应起来,当切换到其他分支的时候(比如master分支),容易丢失代码;
但是分离头指针也有它的应用场景,就是在自己做尝试或者测试的时候可以分离头指针,当尝试完毕没有用的时候可以随时丢弃,
但是如果觉得尝试有用,那么可以新建一个分支,使用 git branch <新分支的名称> commitId

^ ~ 都是父节点,区别是跟随数字时候,^2 是第二个父节点,而~2是父节点的父节点

删除分支

    git branch -d commitid / 'message'

1、git fetch 和 git pull 的区别 在执行 git pull 后,代码会自动 merge 到本地的分支中,而 git fetch 会忽略掉这个 merge 操作,因此简单来说:

    git pull = git fetch + git merge

2、git pull 和 git pull --rebase 区别 git pull 命令默认包含了一个 --merge 参数,因此二者的区别其实就是 merge 和 rebase 的区别。

merge 会创建一个新的 commit,如果合并时遇到了冲突,需要解决冲突后重新 commit。

Merge在这里插入图片描述

Rebase

在这里插入图片描述

rebase 会将两个分支进行合并,同时合并之前的 commit 历史。如果出现冲突,解决冲突后执行以下命令即可:

    git add
    git rebase --continue