Article
Git的使用方法
00 分钟
2019-7-14
2023-5-21
type
status
category
date
slug
summary
tags
icon
Last edited time
May 21, 2023 07:57 AM

一、Git的"三棵树"

  • Working Directory 工作区
  • Stage 暂存区
  • Repository Git仓库

二、GIt的工作流程

  • 在工作目录中添加、修改文件
  • 将需要进行版本管理的文件放入暂存区
  • 将缓暂存区的文件提交到Git仓库

三、Git管理的文件的三种状态

  • modified(已修改)
  • staged(已暂存)
  • committed(已提交)

四、创建仓库

  1. 在finder中新建一个文件夹。命名为MyProject
  1. 在终端中依次输入
  • cd MyProject
  • git init
  • 若成功,则会显示
  • Initialized empty Git repository in /Users/edisonhuang/MyProject/.git/
  1. 将工作目录的文件放到GIt仓库只需要两步
  • git add 文件名
  • git commit -m "你做了什么"

五、查看状态,提交文件

  • git status
    • 如果显示
      则工作目录干净,没有需要提交的内容
  • 在MyProject下创建text_1.md文件,再次git status
    • 说明有文件在暂存区,可以提交到仓库
      git add text_1.md
  • 提交到仓库
    • git commit -m "提交了一个测试文件"

六、查看历史提交

git log
git log --decorate --oneline --graph --all
decorate 让log显示指向这个提交的所引用:分支,还有标签
oneline log的精简显示
graph 图形化显示
all 所有分支

七、reset

  • git rest --mixed HEAD~ (--mixed默认的可以不写)
    • 移动HEAD的指向,将其指向上一个快照
    • 将HEAD移动后指向的快照回滚到暂存区
    • git reset HEAD~几个波浪线就会回滚到之前~个快照
    • 或者直接git reset HEAD~5 回滚回前5个快照
  • git rest --soft HEAD~
    • 移动HEAD指向,将其指向上一个快照
  • git rest --hard HEAD~
    • 移动HEAD的指向,将其指向上一个快照
    • 将HEAD移动后指向的快照回滚到暂存区
    • 将暂存区的文件还原到工作目录
  • 总结
    • 移动HEAD的指向,将其指向上一个快照(--soft)
    • 将HEAD移动后指向的快照回滚到暂存区(—mixed,默认)
    • 将暂存区的文件还原到工作目录(—hard)
  • 回滚/前滚指定快照
    • git reset +id号
  • 回滚/前滚指定文件
    • git reset 版本快照 文件名/路径

八、diff命令

  • 比较暂存区与工作目录
    • git diff
  • 比较两个历史快照
    • git diff 快照ID1,快照ID2
  • 比较当前工作目录和GIt仓库中的快照
    • git diff 快照id
  • 比较当前目录和最新的快照
    • git diff HEAD
  • 比较暂存区和Git仓库快照
    • git diff --cached [ 快照ID ]
notion image

九、修改最后一次提交

  • 修改提交说明
    • git commit --amend 进入修改页面,中文有可能乱码
    • git commit --amend -m "提交说明"不进入修改页面直接写命令的时候修改

十、删除文件

  • git rm 文件名
    • 该命令删除的只是工作目录和暂存区域的文件,也就是取消跟踪,在下次提交时不纳入版本管理
    • 当工作目录和暂存区域的同一个文件存在不同内容时,执行git rm -f 文件名 命令就可以把两个都删除
    • 如果只删除暂存区域的文件(保留工作目录的),可以执行git rm --cached 文件名命令实现

十一、分支

  • 创建分支
    • git branch 文件名
  • 切换分支
    • git check 分支名
  • 创建并切换分支
    • git checkout -b 分支名
  • 合并分支
    • git merge 分支名
  • 删除分支
    • git branch -d 分支名
  • 匿名分支

十二、重命名文件

  • git mv 旧文件名 新文件名

十三、checkout

  • 从历史快照或暂存区拷贝文件到工作目录
    • git checkout --文件名 —是为了预防恰好有一个分支和文件名相同,若确定没有的话,可以写
    • git checkout 文件名
  • 切换分支(主要功能)
    • 修改指向快照的指针
    • 将指向的快照恢复到暂存区域和工作目录
    • 只需要恢复指定的文件/路径,只需要指定具体的文件

十四、checkout和reset的区别

 
  • 恢复文件
    • checkout和reset命令都可以用于恢复指定快照的指定文件,并且都不会改变HEAD指针的指向
    • 区别
      • reset命令只将指定文件恢复到暂存区域(reset命令后面跟的是文件的时候soft和hard不能被使用,默认就是mixed),而checkout命令是同事覆盖暂存区域和工作目录
    • 这样看来,恢复文件,reset比checkout安全一些
  • 恢复快照
    • reset命令将移动HEAD指针(soft)->覆盖暂存区域(mixed,默认)->覆盖工作目录(hard)
    • checkout虽然用于切换分支,但事实上也是通过移动HEAD指针和覆盖暂存区域,工作目录来实现的
  • 重点区别
    • 一、对于reset —hard来说,checkout更安全,因为checkout命令在切换分支前会先检查一下当前的工作状态,如果不是“clean”的话,Git不会允许你这样操作,而reset —hard是直接覆盖所有数据
    • 二、如何更新HEAD指向,reset命令会移动HEAD所在分支的指向,而checkout命令只会移动HEAD自身来指向另一个分支

评论