2.本地仓库

本文最后更新于:2021年9月8日 晚上

本地仓库

仓库版本控制

  • git status:查看本地仓库状态

  • git diff:比较工作区和暂存区修改

    • git diff head:比较工作区和暂存区快照的差异
    • git diff --cached head:比较暂存区和最近一次commit后的修改
  • git log:显示从最近开始的提交过的版本信息(包含多种选项,具体情况使用

    • - n:限制数量
    • -p:展开显示每次提交内容的差异
    • --author="xxx":按提交者名字搜索并显示(非整个单词匹配)
    • --grep="xxx":按指定内容搜索并显示
    • -- <file>:仅显示包含指定文件修改的commit
    • --graph:显示分支操作图
    • --pretty=oneline:显示日志简化信息,每条信息只占一行

    gitk可以启动图形化工具来查阅提交历史

  • git reset xxx:回退到仓库版本xxx(之后的版本不保留)

    • --hard:回退的同时,同时会修改工作区到回退版本
    • xxx
      • Git中用head表示当前版本,上个版本是head^,上上个版本是head^^,也可用head~10来表示上10个版本
      • 直接用git log中显示commit id(版本号)前几位
  • git revert xxx

    • 撤销某次commit操作(之后的操作仍然保留)
  • git reflog:查看本地所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

  • git mv <文件名> <文件新名>:重新命名文件

    • 同样需要提交修改
    • git理解为一次移动操作

工作区和暂存区

  • 工作区:就是你在电脑里能看到的目录
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库
    • 版本库中存在一个称为stage(或index)的暂存区,还有Git为为我们自动创建的第一个分支main,以及指向master的一个指针叫HEAD

img

  • 我们把文件往Git版本库里添加的时候,是分两步执行的:

    第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

    第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

    因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改

管理修改

为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件

  • git每次都会对仓库内发生的修改情况进行记录,只要存在修改就会存在记录
  • 考虑这样一种情况:第一次修改 -> git add -> 第二次修改 -> git commit
    • add会将第一次修改提交到暂存区,commit只会将暂存区的文件提交
    • 但是这并不意味着第二次修改不存在了,我们可以再进行add后再提交,仍然可以提交第二次修改

撤销操作

  • git checkout 可以用来新建或者切换分支, 也可以用来回退文件版本
  • Git 2.23 版本开始引入了两个新的命令:
    • git switch 切换分支
    • git restore <文件名>:撤销对文件的修改,还原工作区的文件
      • --staged:将暂存区的文件从暂存区撤出,但不会更改文件的内容
      • 所有如果想完全撤销提交到暂存区的文件,顺序是:暂存区撤销->工作区撤销
  • git commit --amend:修改最后一次的提交
    • 紧跟着上次提交使用,可以修改上次提交的说明
    • 如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 --amend 提交
      • 两次commit但产生一次提交
  • 如果修改被commit了,那么只能回退版本

删除文件

  • 一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了
  • 这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了
  • 现在你有两个选择,
    • 一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit
      • 或者用git add <file>删掉
    • 另一种情况是删错了,因为版本库里还有,所以当然可以撤销修改
      • 注意这里说的是版本库,所以包括add的文件
  • 注意:从来没有被添加到版本库就被删除的文件,是无法恢复的!
  • git rm --cached <文件名>:将文件从版本库中删除,但是工作区中不删除

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!