程序锅

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于

  • 搜索
基础知识 Etcd LeetCode 计算机体系结构 Kubernetes Containerd Docker 容器 云原生 Serverless 项目开发维护 ELF 深入理解程序 Tmux Vim Linux Kernel Linux numpy matplotlib 机器学习 MQTT 网络基础 Thrift RPC OS 操作系统 Clang 研途 数据结构和算法 Java 编程语言 Golang Python 个人网站搭建 Nginx 计算机通用技术 Git

Git | Git 操作整理-基础篇

发表于 2020-03-23 | 分类于 Git | 0 | 阅读次数 3285

1. Git 的三个区域

在正式 git 之前,我们先来了解一下 git 的 3 个区域,分别是工作目录、暂存区、版本历史。这个知识点是尤为重要的,在理解了这三个区域之后,git 的操作才会显得很容易。

  • 工作目录是直接跟文件相关的,比如被 git 管理起来的文件被修改了的话,在使用 git status 命令查看的时候会显示出来。显示的内容就是相比之前的版本 A 变更了的哪些文件;
  • 当使用 git add 命令之后,文件修改的东西就被提交到暂存区了,而工作目录中版本是变化之后了的,比如版本 B。那么使用 git status 之后,暂存区显示的内容是相对版本 A 的变化的文件信息,也相当于是版本 B 的情况;
  • 当使用 git commit 之后,这个更改就被提交到了版本历史中,那么版本历史就从版本 A 变到了版本 B;

2. Git 基础使用

2.1. Git 配置相关

在使用 Git 管理文件系统的时候,需要进行一些配置,比如用户信息的配置。 Git 管理文件系统主要分为三个层次,如下所示(PS:只输入下面这些命令是不行的)

# config的三个作用域
# 缺省等同于local
$ git config --local		# local只对某个仓库有效
$ git config --global 	# global对登录用户所有仓库有效,在用户根目录下,比如 root 用户就在 /root 目录下有个关于 git 的配置文件
$ git config --system 	# system对系统所有登录的用户有效,基本不用

优先级 local > global > system,也就是说当对一个仓库同时设置了 global 和 local 那么采用local配置的信息。

  • 查看配置信息

    有些时候我们也会查看 Git 配置信息等,使用如下命令可以查看相应层次的配置信息

    # 显示 config 的配置 加--list
    $ git config --list --local	# 这个只能在git仓库中使用
    $ git config --list --global
    $ git config --list --system
    
  • 配置信息---以用户信息为例

    $ git config --global user.name 'your_name '                                             
    $ git config --global user.email 'your_email@domain.com'
    

    Git 相对于其他版本控制系统需要这些信息,是因为在版本控制中,做出的修改是跟这些用户信息捆绑在一起的。绑定的 email 是为了,当评审人员对代码提出了相应的修改,那么 Git 管理系统会对修改代码的提交者绑定的 email 发送邮件。所以email 需要是一个有效的 email,能收的到邮件的 email。

  • 清除配置信息

    $ git config --unset --local user.name
    
    $ git config --unset --global user.name
    

2.2. 建立 Git 仓库

  • 把已有的项目代码纳入 Git 管理
$ cd 项目代码所在的文件夹
$ git init
  • 新建的项目直接用Git管理
$ git init your_project # 会在当前路径下创建和项目名称同名的文件夹
$ cd your_project

2.3. 仓库管理常用命令

  • git add 主要是把新文件或者文件变动的情况添加到暂存区

    $ git add readme.md	# 将 readme.md 文件添加到暂存区
    $ git add .	# 将当前工作目录的所有文件添加到暂存区
    $ git add -u # 把修改之后的文件(这些文件已经被管理起来了)一次性提交到暂存区
    

    暂存区的文件也是相当于被 git 管理了的。

  • git status 可以查看工作目录和暂存区的状态

    $ git status
    

    Tips:假如 bash 有颜色显示的话,会看到红色是代表工作目录,绿色代表暂存区。

  • git commit 命令进行提交,提交的历史会被记录下来

    $ git commit -m 'Add readme.md'	# -m 指定 commit 的信息
    $ git commit	# 这时候会跳出一个文本输入界面,让你输入更多的 commit 信息
    
  • git mv 将 git 管理的文件进行重命名

    git mv readme readme.md	# 使用git的方式对文件进行重命名
    
  • git rm 从 git 管理的文件删除某个已管理的文件,同时把修改的情况添加到暂存区

  • git log 命令查看提交历史,也就是版本演进历史

    上面已经稍微使用了一下 git log 命令,这边更加详细的来阐述这个命令

    git log	# 只查看当前分支(Head所指的分支)的log情况
    git log --oneline	# 简洁的显示版本更新信息
    git log -n2		# n2 代表查看最近两次commit历史
    git log -2 		# 2 代表查看最近两次commit历史
    git log -n2 --oneline	# 简洁的显示最近两次的版本更新信息
    git log branch_name	# 后面跟上分支名表示查看该分支的log日志
    
    git log -all	# 列出所有分支的log
    git log --all --graph	# 以图形化的方式查看
    git log --oneline --all	# 以简洁的方式查看所有分支的log
    git log --oneline --all	-n4# 以简洁的方式查看所有分支的log
    
    git help log	# 以web的方式查看log的帮助文档,等同于
    git help --web log # 和上面那条效果一样
    

2.4. 分支相关

分支就相当于一个独立的开发空间,比如前端和后端开发,前端开发可以建立一个分支,后端开发也可以建立一个分支,但是彼此在不同工作空间里面工作的时候是互不影响的,当需要集成的时候又可以把他们集成到一个公共的分支上面去。下面是有关分支的操作:

  • HEAD->temp2 表示当前的 HEAD 指向的是 temp2 分支,那么其实真正指向的是该分支最后一次 commit

  • git branch 查看分支情况、创建分支、删除分支

    git branch -v # 查看本地分支的详细情况
    git branch -a # 查看所有分支,包括远端分支,但没有过于详细的信息
    git branch -av # 查看所有分支情况
    
    git branch branch_name hash_value # 创建一个新的分支,基于 hash_value 的这个 commit 创建一个新的分支,hash_value 可以省略,那么默认是基于当前分支的最后一个 commit 创建。
    
    git branch -d branch_name
    git branch -D branch_name 	# 这个分支已经有了一些 commit
    

    如下图所示,要想删除 temp 分支就得用 -D

  • git checkout 切换分支或者创建分支

    git checkout branch_name	# 切换分支
    git checkout master
    
    git checkout -b branch_name git_id # 创建一个新的分支并切换过去,git_id可以是hash_value,也可以是某个分支的名字(分支的名字其实就指向了某个 commit)
    git checkout -b temp 9ef147d
    git checkout -b temp2 master
    

    切换分支,必须在.git的同级目录下执行

2.5. 比较 --- git diff

2.5.1. 不同 commit、分支 之间进行比较

git diff hash_value1 hash_value2 # hash_value1 对应的 comimit 和 hash_value2 对应的 commit 进行比较
git diff hash_value1 hash_value2 -- file_name1 file_name2	# 在上述基础之上,只比较 file_name1、file_name2 这两个文件

git diff branch_name1 branch_name2	# 对两个分支进行比较
git diff branch_name1 branch_name2	-- file_name1 file_name2

git diff HEAD HEAD^		# HEAD 指向的 commit 与该 commit 的父亲 commit 进行比较
git diff HEAD HEAD^1	# 同上
git diff HEAD HEAD^^	# HEAD 指向的 commit 与该 commit 的父亲的父亲 commit 进行比较

git diff HEAD HEAD~		# HEAD 指向的 commit 与该 commit 的父亲 commit 进行比较
git diff HEAD HEAD~1	# 同上
git diff HEAD HEAD~~	# HEAD 指向的 commit 与该 commit 的父亲的父亲 commit 进行比较
git diff HEAD HEAD~2	# 同上

1.可以直接使用 HEAD,因为 HEAD 实际上指向的是某个 commit 的。同理,比较两个分支的差异其实就是比较两个分支最近 commit 的差异,因为分支名其实就是一个指针,指向的还是分支最近的 commit。

2. 后面只能跟数字1,一个 就表示往父亲 commit 这边追溯一个,以此类推

3.~ 后面跟任何数字都可,同样一个 ~ 就表示往父亲 commit 这边追溯一个,以此类推

2.5.2. 暂存区和 HEAD 做比较

git diff --cached

比如一开始的话,HEAD 、暂存区和工作目录都是一样的,都是状态A,并且 readme*.md 文件都已经被跟踪起来了。下面我们修改 readme3.md 文件,之后把它 add 到暂存区。然后使用上述命令进行比较,因为 HEAD 中的是历史,还没有被更新,是状态 A,而暂存区是状态 B,所以可以显示出差异。

2.5.3. 工作目录和暂存区做比较

git diff						# 对所有文件进行比较
git diff -- file_name1 file_name2 # 对指定文件进行比较

比如一开始的话,HEAD 、暂存区和工作目录都是一样的,都是状态A,并且 readme*.md 文件都已经被跟踪起来了。下面我们修改 readme3.md 文件,但是不 add 到暂存区,然后使用上述命令进行比较,由于readme3.md 是在工作区中已经被更改了,工作区是版本 B,而暂存区还没更新是版本 A,所以进行比较会有如下结果。

卷死我
dawnguo 微信支付

微信支付

dawnguo 支付宝

支付宝

  • 本文作者: dawnguo
  • 本文链接: /archives/4
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# Git # 计算机通用技术
Go | Go 的并发编程
数据结构和算法 | 为什么学?是什么?怎么学?【1】
  • 文章目录
  • 站点概览
dawnguo

dawnguo

215 日志
24 分类
37 标签
RSS
Creative Commons
© 2018 — 2025 程序锅
0%