Git版本控制(一)

1. Git简介

Git是一个开源的分布式版本控制系统,由Linus于2005年为管理Linux内核开发而创建。它通过记录文件的变化历史,帮助开发者高效协作和管理代码。与集中式版本控制系统(如SVN)不同,Git允许每个开发者拥有完整的代码仓库副本,支持离线工作,并能快速处理大型项目。Git已成为当今最流行的版本控制工具,被广泛应用于软件开发、文档管理等领域。

2. Git特点

(1)集中式VS分布式

集中式版本控制系统(如SVN)采用单一中央服务器存储所有版本历史记录,开发者必须联网才能提交更改。而分布式版本控制系统(如Git)则允许每个开发者拥有完整的代码仓库副本,包括完整的历史记录,可以离线工作,通过推送/拉取操作与其他开发者同步。

(2)直接记录快照,而非比较差异

Git采用独特的快照存储机制。每次提交时,Git会记录当前所有文件的完整快照,而非仅存储与前一版本的差异。当文件未改变时,Git会智能地创建指向之前相同文件的链接。这种机制使得Git能快速浏览项目历史,回滚到任意版本都只需加载对应快照。

(3)近乎所有操作均为本地执行

由于Git是分布式系统,绝大多数操作都在本地完成,包括:

  • 查看提交历史(git log)

  • 创建分支(git branch)

  • 提交更改(git commit)

  • 合并分支(git merge)

  • 版本回退(git reset)

只有需要与远程仓库同步时才需要网络连接(如git push/pull)。这种设计显著提高了开发效率,特别是在网络条件不佳的情况下。

3. Git仓库的基本概念和流程

版本库又名仓库(repository),可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件"还原"。

(1)Git仓库的基本概念

**远程仓库(Remote):**也叫作资源库,是远程机器上的代码库,用于做不同版本库文件交换更新。如Gitlab,GitHub,gitee。

**本地库(Repository):**是用户在本地创建的目录,拥有远程库的一个快照,由工作区和版本库构成。

**工作区(Workspace):**本地库的根目录中除.git目录以外的内容,存储内容的实际文件。

**暂存区(stage/Index):**也叫做缓存区,暂存信息存放在.git目录下的index文件(.git/index)中,用于临时保存内容的修改。

**版本库(.git目录):**是本地库的根目录中的一个隐藏目录.git,用于记录版本信息,Git进行版本控制所需要的文件,则都放在.git文件夹中。

**分支(Branch):**本地库中默认创建一个主(master)分支,分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

本地库和远程库的关系

4. Git仓库的工作流程

从一般开发者的角度来看,流程如下:

  1. 克隆远程库:从远程库上克隆完整的Git仓库(包括代码和版本信息)到本地;

  2. 在本地库上修改代码:在本地库上根据不同的开发目的,创建分支,修改代码;

  3. 提交到分支:在本地分支上提交代码;

  4. 把修改合并到本地主分支:在本地库上提交更新,也就是说,把修改合并到本地主分支;

  5. 把远程库合并到本地主分支:把远程库上的最新代码fetch下来,跟本地主分支合并,如果存在冲突,那么解决冲突。

  6. 把本地主分支提交到远程库:生成补丁(patch),把补丁发送给远程库

5. Git的命令

常用6个命令如下:

(1)创建版本库

D盘目录下新建一个testGit版本库(D:\testGit)。右键通过命令行的方式打开窗口

pwd 命令是用于显示当前的目录。

通过命令 git init 把这个目录变成git可以管理的仓库

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

这时候当前testgit目录下会多了一个.git的目录,这个目录是Git来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了。

.git里面内容如下

(2)Git配置信息Config

在git中,我们使用git config 命令用来配置git的配置文件,git配置级别主要有以下3类:

仓库级别 local 【优先级最高】git 仓库级别对应的配置文件是当前仓库下的.git/config

用户级别 global【优先级次之】git 用户级别对应的配置文件是用户宿主目录下的~/.gitconfig

系统级别 system【优先级最低】git系统级别对应的配置文件是git安装目录下的 /etc/gitconfig

可以在cmd命令提示符中输入以下查看配置信息

git config --local -l

git config --global -l

git config --system -l

config修改用户名和邮箱

git config --global user.name "renliang"

git config --global user.email "renliang@126.com"

注意:不要手动修改 每个级别的配置文件,要用命令。

Git会使用这一系列的配置文件来存储你定义的偏好,它首先会查找/etc/gitconfig文件(系统级),该文件含有对系统上所有用户及他们所拥有的仓库都生效的配置值。接下来Git会查找每个用户的~/.gitconfig文件(全局级)。最后Git会查找由用户定义的各个库中Git目录下的配置文件.git/config(仓库级),该文件中的值只对当前所属仓库有效。

(3)添加文件和修改提交文件

所有的版本控制系统,只能跟踪文本文件的改动,比如txt文件,网页,所有程序的代码等,Git也不列外,版本控制系统可以告诉你每次的改动,但是图片,视频这些二进制文件,虽能也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是知道图片从1kb变成2kb,但是到底改了啥,版本控制也不知道。

创建文件test.txt,此刻文件在工作区(WorkSpace)

通过git status可以查看文件追踪的情况

使用命令 git add readme.txt添加到暂存区里面去,添加到暂存区的时候会有警告出现。不过没关系,是换行符的警告。

如果要提交多个文件,可以在add后面指定文件的列表

git add test2.txt test3.txt

如果想要添加工作区所有文件到暂存区

git add .

可以通过提示的话来撤销回工作区

git rm --cached test3.txt

提交文件到主分支,可以通过命令git status来查看是否还有文件未提交

修改文件,在文件中加入一行。查看git的状态,发现文件进入到工作区

提交修改后的文件

(4)版本回退

日志查看,git log命令显示从最近到最远的显示日志

版本回退,想把当前的版本回退到上一个版本,可以使用如下2种命令,第一种是:git reset --hard HEAD^ 那么如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推。

那如果要回退到前100个版本的话,可以使用下面的简便命令操作:

git reset --hard HEAD~100

查看提交日志,已经没有了update 1 commit记录了

同时我们也可以通过sha1的前四位来做回退

git reset --heard sha1

回退撤销,现在想回退到最新的版本update 1 commit,可以通过版本号回退,使用命令方法如下:

git reset --hard 版本号

但是现在的问题假如已经关掉过一次命令行或者update 1内容的版本号并不知道呢?

可以通过如下命令即可获取到版本号:

git reflog

通过上面的显示我们可以知道,增加内容update 1的版本号是618840c

(5)删除文件

一般情况下,可以直接在文件目录中把文件删了,或者使用如上rm命令:rm b.txt ,如果想彻底从版本库中删掉了此文件的话,可以再执行commit命令 提交掉。

发现删除的文件直接进入暂存区(此刻需要注意,如果使用rm删除不在暂存区,需要git add才会进入暂存区。如果进入暂存区可以退回工作区,使用下面命令 git reset HEAD test3.txt),提交之后文件被删除。

相关推荐
毛豆的毛豆Y4 小时前
git 如何 fork 一个仓库的所有分支
git
测试人社区—84165 小时前
Postman API测试指南
人工智能·git·测试工具·自动化·bug·postman
芒克芒克7 小时前
『Git Tag标签+项目远程操作全解:推送、拉取与版本同步实战』
java·git
fruge8 小时前
前端工程化最佳实践:ESLint+Prettier+Git Hooks 统一开发规范
前端·git
_院长大人_8 小时前
解决 Git 提交大文件导致 Push 被拒绝的问题
java·git·后端·elasticsearch
浪潮IT馆8 小时前
win11安装Git
windows·git
SoulmateShkart9 小时前
Git基本使用命令简略版
git
达子6669 小时前
笔记-使用Repo工具管理多个关联仓库(适用于复杂项目)
git·gitee·github
studytosky11 小时前
Linux 基础开发工具(1):yum 与 vim 实用指南
linux·运维·服务器·git·python·编辑器·vim