Git相关操作 | 青训营

121 阅读4分钟

1.1 概述

Git是一个开源的分布式版本控制系统,可以快速、高效地处理任何大小的项目。

版本控制: 跟踪和管理软件代码变更,以便将来查阅特定版本修订情况。最重要的是可以记录文件修改历史,从而让用户能够查看历史版本。

1.2 集中式版本控制 VS 分布式版本控制

集中式:有一个单一的集中管理的服务器,保存所有文件的修订版本,协同工作的人都通过客户端连接到这台服务器,取出最新文件或者提交更新

缺点: 中央服务器的单点故障,服务器损坏,都无法区文件和更新

分布式: 个人电脑就是一个库,在自己的库里做版本控制,再提交到远程库,又称代码托管中心(如GitHub)

优点: 服务器断网也能开发(版本控制在本地运行);每个客户端保存的是整个完整的项目

1.3 Git工作机制

版本库👉.git

  • 当我们使用git管理文件时,比如git init时,这个时候,会多一个.git文件,我们把这个文件称之为版本库。
  • .git文件另外一个作用就是它在创建的时候,会自动创建master分支,并且将HEAD指针指向master分支。

工作区

  • 本地项目存放文件的位置
  • 可以理解成图上的workspace

暂存区 (Index/Stage)

  • 顾名思义就是暂时存放文件的地方,通过是通过add命令将工作区的文件添加到缓冲区

本地仓库(Repository)

  • 通常情况下,我们使用commit命令可以将暂存区的文件添加到本地仓库
  • 通常而言,HEAD指针指向的就是master分支

远程仓库(Remote)

  • 举个例子,当我们使用GitHub托管我们项目时,它就是一个远程仓库。
  • 通常我们使用clone命令将远程仓库代码拷贝下来,本地代码更新后,通过push托送给远程仓库。

1.4 Git 常用命令

配置命令

git config --list   # 列出当前配置
git config --local --list   # 列出repository配置
git config --global --list  # 列出全局配置
git config --system --list  # 列出系统配置
​
git config --global user.name Lowell    # 设置用户签名
git config --global user.email xxx@xxx.com  # 设置用户邮箱

Git首次安装必须设置用户签名,否则无法提交代码

git init    # 初始化本地库
​
git status  # 查询状态
​
git add <file>  # 添加至暂存区
​
git commit -m "first commit(版本信息)" <file>   # 提交到本地库
​
git reflog  # 查看版本信息
​
git log # 查看版本详细信息
​
git reset <版本号> # 版本穿越

红色代表未追踪到文件,绿色代表Git追踪到了文件,但是还存在暂存区,依旧可以被删除

在本地库的内存中,存有你每次提交的文件的日志信息,版本穿越其实就是通过修改head所指向的分支的指针,指向你需要的版本的地址

1.5 Git分支操作

概述

Git分支是指向提交对象的可变指针。Git的默认分支名字是master。在多次提交操作之后,已经有一个指向最后那个提交对象的master分支。master分支会在每次提交时自动向前移动

优点

同时并行推进多个功能开发,提高开发效率。各个分支在开发过程中,如果某一个分支开发失败,不会影响其他分支。

分支命令

git branch -v   # 查看本地分支
git branch -r   # 查看远程分支
git branch -a   # 查看本地和远程分支
​
git branch <name>   # 创建分支
git checkout <name> # 从当前分支切换其他分支
git merge <name>    # 将指定分支合并到当前分支
git branch -m <oldname> <newname>   # 重命名分支
​
git branch -d <name>    # 删除分支
git push origin -d <name>   # 删除远程分支
​
git branch --merged # 查看有哪些分支已经合并到了当前分支
git branch --no-merged  # 查看有哪些分支没有合并到当前分支

合并分支产生代码冲突的原因

  • 合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改,Git无法决定使用哪一个,必须人为决定

(master | MERGING)正在合并中,未成功

切换分支的本质就是移动HEAD指针

Github 操作

git remote -v   // 查看当前所有远程别名
git remote add <name> 远程库url    // 创建远程仓库别名
git push 别名/url 分支      // 将本地库
git pull 别名/url 分支
git clone url   // 将文件从远程库拉取代码,初始化本地库,创建别名
fork // 将文件从别人的远程库拉到自己的远程库