一、基本介绍
Git是一种分布式版本控制系统,广泛用于管理和追踪软件开发项目的代码变更。它是由Linus Torvalds在2005年创建的,旨在解决Linux内核开发中遇到的问题。
版本控制系统的主要目标是跟踪文件的变化,记录每个版本的修改,并帮助团队协作开发。Git通过在本地保存完整的版本历史记录,并支持多个远程仓库之间的同步,使团队成员能够独立工作,并方便地分享和合并代码。
关于Git还有一段小故事,在早期还没有Git的时候,Linux源码管理是使用商业软件BitKeeper,但BitKeeper对开源社区使用做了严格的限制,其中有一条是不允许反编译BitKeeper,但有一个为OSDL(Open Source Development Labs)工作的开发者(Andrew Tridgell,samba和rsync的作者)公然高调违反,进行反编译。导致BitKeeper撤销了对开源社区的授权。失去了BitKeeper源代码管理工具,Linux内核代码维护比较麻烦,不可能像早期那种通过邮件互发Patch的方式进行维护,Linux作者Linus花费数月的时间开发出来了第一个代码版本控制工具Git,并积极测试和改进,其中Git也吸收了一些BitKeeper的设计,如分布式设计、提交、多树(“分支”)等等。从Linux-2.6.12-rc2开始,Linux内核正式转移到了git上托管。至今,Git已经成为最流行的分布式版本控制系统之一,并且在各个领域的软件开发中得到了广泛应用。
二、常见命令
2.1 提交与修改
Git 的工作就是创建和保存你的项目的快照及与之后的快照进行对比。下表列出了有关创建与提交你的项目的快照的命令:
命令 | 说明 |
---|---|
git add | 添加文件到暂存区 |
git status | 查看仓库当前的状态,显示有变更的文件 |
git diff | 比较文件的不同,即暂存区和工作区的差异 |
git commit | 提交暂存区到本地仓库 |
git reset | 回退版本 |
git rm | 将文件从暂存区和工作区中删除 |
git mv | 移动或重命名工作区文件 |
git checkout | 分支切换 |
git switch (Git 2.23 版本引入) | 更清晰地切换分支 |
2.2 提交日志
命令 | 说明 |
---|---|
git log | 查看历史提交记录,它会按照提交时间的倒序显示提交的详细信息,包括提交哈希值、作者、提交日期、提交信息等。 |
git blame |
以列表形式查看指定文件的历史修改记录 |
2.3 远程操作
命令 | 说明 |
---|---|
git remote | 远程仓库操作,例如 git remote -v:显示详细信息,包括远程仓库的URL。git remote add <remote_name> <remote_url>:添加一个新的远程仓库,指定远程仓库的名称和URL |
git fetch | 从远程获取代码库,但并不自动合并或修改本地分支。它会将远程分支的引用复制到本地仓库中,使你可以在本地查看远程仓库的更新情况。 |
git pull | 下载远程代码并合并 |
git push | 上传远程代码并合并 |
2.4 标签管理
Git的标签是版本库的快照,其实它就是指向某个commit的指针(跟分支的主要区别是分支的指向可以移动,分支的指向会随着新的提交而变动,标签的指向不能移动)
命令 | 说明 |
---|---|
git tag | 用于在Git仓库中创建、列出或删除标签(tag)。例如创建一个轻量级标签(不包含额外的信息):git tag <tag_name>,删除本地标签:git tag -d <tag_name>等等 |
三、核心组件
3.1 概念
在Git中,代码仓库有三个重要的组件:工作区(Working Directory)、暂存区(Staging Area)和版本库(Repository)。
-
工作区:就是在电脑里能看到的目录。 -
暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。 -
版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
3.2 详细介绍
图中左侧为工作区,右侧为版本库。在版本库中标记为 “index” 的区域是暂存区(stage/index),标记为 “master” 的是 master 分支所代表的目录树。
图中的 objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容。
当把文件往Git版本库里添加的时候,是分两步执行的:第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;暂存区的目录被更新,同时工作区新增的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。暂存区的目录树写到版本库中。
四、总结
学习Git时,有以下几个核心概念需要理解:
-
仓库(Repository):Git用于存储代码和版本历史的地方。它可以是本地仓库(Local Repository)或远程仓库(Remote Repository)。 -
提交(Commit):将代码更改保存到Git仓库中的操作。每个提交都有一个唯一的标识符,可以用来查看和回溯版本历史。 -
分支(Branch):用于在不同的开发线上进行并行开发和管理不同的功能或版本。通过创建、切换和合并分支,可以保持代码的分离和整合。 -
合并(Merge):将一个分支的更改合并到另一个分支中。这使得不同分支上的代码更改得以合并,保证了团队成员之间的协作和代码的一致性。 -
远程仓库(Remote Repository):位于网络上的仓库,用于多人协作和代码共享。可以与远程仓库进行同步和交互,推送本地更改或拉取远程更新。 -
标签(Tag):用于标记特定的提交版本,通常用于表示发布版本或重要的里程碑。标签可用于快速定位特定版本和发布。
通过掌握这些概念,可以更好地理解Git的工作原理和使用方式。了解这些基础知识后,练习使用常用的Git命令,如提交、切换分支、合并代码等,可以更加熟练地使用Git进行版本控制和团队协作。
原文始发于微信公众号(洋洋自语):初识Git:开启版本控制之旅
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/273092.html