Git基础【Git权威指南】

162 阅读5分钟

1. Git的三个作用域

  • Git config --local

local只对某个仓库有效

  • Git config --global

global对当前用户所有的仓库有效

  • Git config --system

system对系统所有登录的用户有效

2. 显示config的配置,加 --list

  • git config --list --local

3. Git 命令

  • git add -u

把所有工作区中被Git,一起提交到暂存区.

  • git rm demo.txt

删除demo.txt文件

  • git reset --hard

工作路径和暂存区里面所有的变更都会被清理

  • git mv demo.txt

变更文件名

  • git log --oneline
  • git log - n9

查看最近几条的日志,也可以和上面的组合起来用

  • git log --all | git log --all --graph

查看所有分支的提交信息

  • git branch -v

查看本地的分支

  • gitk

图形化界面


  • ls -al .git
drwxr-xr-x  15   staff    480  9 20 22:22 .
drwxr-xr-x  11   staff    352  8  9 15:07 ..
-rw-r--r--   1   staff      0  8  9 16:23 COMMIT_EDITMSG
-rw-r--r--   1   staff    675  8  9 16:23 FETCH_HEAD
-rw-r--r--   1   staff     21  8  9 16:24 HEAD
-rw-r--r--   1   staff     41  8  9 16:24 ORIG_HEAD
-rw-r--r--   1   staff    519  8  9 16:24 config
-rw-r--r--   1   staff     73  8  9 15:04 description
drwxr-xr-x  13   staff    416  8  9 15:04 hooks
-rw-r--r--   1   staff  19028  9 20 22:21 index
drwxr-xr-x   3   staff     96  8  9 15:04 info
drwxr-xr-x   4   staff    128  8  9 15:04 logs
drwxr-xr-x  33   staff   1056  8  9 16:22 objects
-rw-r--r--   1   staff    331  8  9 15:04 packed-refs
drwxr-xr-x   5   staff    160  8  9 15:04 refs

HEAD 文件记录的是当前分支信息

config 记录仓库相关的配置信息 refs下面有headstags两个文件夹, 其中heads中下面有本地分支的文件, 其中master文件中可以有以下操作:

  • git cat-file -t commit_id

commit_id 是通过 cat master文件中获取到的数据, 其实这个命令就是查看对象信息,综上可知matser文件中是存储的master分支的指针地址

  • git cat-file -p commit_id

查看 对象信息

  • objects 目录下面记录了Git Tree信息,里面是文件

  • git branch -av

查看当前的分支, 这个命令是真的强大

  • git commit -am"xxx"

直接提交,不会存在暂存区

  • git checkout -b new-branch old-branch

创建一个新分支基于旧分支

  • git branch -d 分支 | git branch -D 分支

-D 强制删除分支

  • git commit --amend

修改Git最近一次commitMessage记录.

  • git rebase -i 要修改的commit的父亲commit_id

如果在未提交到团队的集成分支,这样可以做修改,随意改变某个commit的message,否则就不能轻易改动.如果是要合并很多条为一条,可以选择时间最早的一条的父commit 哈希值,用这个同样的命令.

  • git diff --cached

暂存区与HEAD记录的区别。

  • git diff

工作区和暂存区的区别。

  • git reset HEAD

恢复暂存区,保持和HEAD一致。

  • git reset HEAD -- filename

某个文件恢复暂存区,保持和HEAD一致,针对的是单个文件。

  • git checkout -- filename

把暂存区的内容变更到工作区

  • git reset --hard commit_id

暂存区和工作区都恢复成指定 commit_id 指定的内容

  • git diff 分支1 分支2 -- filename | git diff commit1 commit2 -- filename

查看两个分支中某个文件的不同

  • git rm filename

删除工作区和暂存区的文件

  • git stash

将当前的修改存放到一个堆栈结构的空间中

  • git stash list

查看所有堆栈空间中的列表信息

  • git stash apply
  • git stash pop

恢复stash区域的文件, 而且丢弃stash记录

PS: git命令不要乱用,例如 git push -f强制性上推

4. Git对象彼此之间的关系

Commit对象: 一个commit 肯定是只能对应 一颗 tree, 这个树代表取出的某个commit对象, 这个commit 代表的就是一个视图,这个视图存的就是一个快照,代表的就是当前 commit 对应的本项目仓库的所有的文件夹 以及文件的快照,那个时间点所有文件的快照. tree 代表了当前这个点这个项目中包含了什么文件夹和文件,这个大的 tree 里面可以嵌套 小的 tree, 她们都有各自的 哈希值, 最下层的 tree 里面包含了文件 blob 对象. blob 对象 代表的就是文件, 重点: git 不识别文件名,她只识别文件,这个可以避免重复储存

5. 智能协议与哑协议

元素 说明 说明
本地协议(1) path/to/repo.git 哑协议
本地协议(2) file://path/to/repo.git 智能协议
http/https协议 https///path/to/repo.git 平时能接触到的基本是智能协议
ssh协议 git@gitee.com:user/to/repo.git 工作中常用的都是智能协议

直观区别: 哑协议传输进度不可见; 智能协议传输可见. 传输速度: 智能协议比哑协议传输速度快.

6. 配置公私钥

  • ls -al ~/.ssh

查看是否有公私钥

  • git remote -v

查看本地备份的协议的地址

  • git remote add 起个名字 地址

与远端站点建立联系

  • git push 名字 --all

将本地所有的分支都push到远程

  • git pull | git fetch

pull分为两步走 fetch和merge

7. 冲突

  • non fast-forwards