前言
随着软件开发的日益复杂,团队协作的需求也变得越来越重要。为了有效地管理代码、跟踪变更以及支持多用户协同工作,使用版本控制系统成为了软件开发的标准实践之一。而git 作为一款分布式的版本控制系统,无论是个人开发者还是大型企业,git 都能够提供必要的工具来确保代码的质量和项目的顺利进行。
本文档将介绍 git 的基本概念、常用命令以及如何在实际项目中应用 git 进行代码管理。我们将介绍 git 日常使用的命令、分支管理、合并策略等话题。
git的基本介绍:
- git 远程仓库(分布式):分布式版本控制系统没有"中央服务器",每个人的电脑上都是一个完整的版本库,所以就不需要联网。
- SVN 版本控制系统(集中式):版本库是集中存放在中央服务器的,工作时要先从中央服务器取得最新的版本,完成工作后,再把自己的文件推送给中央服务器。集中式版本控制系统在工作时需要联网。
而我们为什么要用git提交呢?
-
版本控制 :git最核心的功能之一就是版本控制 。其记录了每次对项目文件的修改,并能够随时回溯到之前的任何版本。这对于修复错误或探索不同的开发路径至关重要。(git 存入的是 代码版本 )
-
分支管理:git的分支功能强大且灵活。通过创建分支,开发者可以在不影响主干代码的前提下实验新特性或修复bug。这有助于保持项目的稳定性和灵活性。
-
协作开发:git支持多人同时在一个项目上工作。每个开发者都可以在自己的本地仓库中独立工作,完成后可以通过合并请求(Pull Request)将更改合并到主仓库中。这种方式极大地提高了团队协作的效率。
-
离线工作能力:由于git是一个分布式版本控制系统,每个开发者的工作站上都有一个完整的项目历史副本。即使没有网络连接,也可以进行提交、查看历史记录等操作。
正因为这些强大的功能,让我们学习git的使用已经成为了必修课。
git的操作:
1. 初始化仓库
git init
: 在当前目录下生成一个 .git 隐藏文件,也就是初始化了一个本地仓库,在你的文件夹下创建了一个隐藏文件夹 .git 。
2. 配置git
git config --global user.name "用户名"
: 设置全局用户名。git config --global user.email "邮箱"
: 设置全局邮箱地址。(--global
即全局配置)
3.提交到远程仓库
- 查看仓库状态:
git status
可以查看当前仓库的状况。
- 添加文件到暂存区:
git add .
:将所有修改过的文件添加到暂存区。git add <file>
:将特定文件添加到暂存区。
- 提交更改:
git commit -m "提交信息"
:将暂存区的更改提交到本地仓库,并附带提交信息,由于添加到仓库是一件很严谨的事情,所以提交的信息一定要精准。(-m
即指定提交信息)git rm --cached <file>
: 取消进行了更改的文件的暂存状态,即移出暂存区,但是文件不会消失。
我们初步创建了一个文件 a.txt 并且添加内容 "嘻嘻" ,在未对其进行添加到暂存区时,我们调用git status
进行查看就会发现。在返还内容中有以下部分:
bash
On branch master //表示在主分支上,即默认分支
No commits yet // 还没有任何提交记录
Untracked files: //表示以下为未跟踪文件 还没有纳入版本管理
(use "git add <file>..." to include in what will be committed)
a.txt //这里就是我们添加的文件,但是还未进行 git add 操作
nothing added to commit but untracked files present (use "git add" to track)
不难发现其提示我们的 a.txt 未进行跟踪,也就是我们还未将a.txt存入暂存区中,下方也提示我们使用 git add
,那么我们就来试一下进行 git add
操作后又会返还什么结果。
而当我们输入 git add a.txt
后,将 a.txt 放入暂存区,git 就对 a.txt 进行了跟踪,当我们再次调用 git status
查看仓库的状况就会出现以下内容:
我们发现原先的 Untracked files
变成了 Changes to be committed
(一些更改已经准备好被提交到版本库中),同理我们创建一个 b.txt 文件,对其内容添加"不嘻嘻",然后存入一个 b.txt 进入暂存区,但是我觉得 b.txt 写的并不好,我想撤回对其的跟踪,此时我就要输入 git rm --cached b.txt
,这样的话就停止了对 b.txt 的跟踪。
让我们再次将 b.txt 放入暂存区,现在我们已经做完了对文件的所有处理,我们现在就需要将暂存区的文件进行提交了,输入 git commit -m "添加了两个文本分别表示我们的心情"
,这样我们就完成了提交文件到远程仓库。
而当我们再次进行 git status
查看本地仓库的状况就会返还 nothing to commit, working tree clean
,这样就表示表示工作目录(working tree)是干净的,即没有未跟踪的文件(untracked files)或者未提交的更改(unstaged changes),我们就完成了提交的检查。
4. 查看代码提交状况
git log
:查看代码提交记录。git log --oneline
:通过添加--oneline
来单行显示提交记录。
如果我们要查看我们的历史提交,我们就可以输入 git log
,这样就会返还我们的提交记录了,或者查看更加精简的记录,输入 git log --oneline
。
我们可以看到在(HEAD -> master)前面有一串字符,"f3014ce"就是我们提交的代码的版本编号,这样我们就可以通过其查找我们之前的代码版本。
5.上传到仓库:
git push <远程主机名> <本地分支名>:<远程分支名>
:把本地仓库的文件推送到远程仓库。
远程分支名可以省略。
bash
git push origin master //将本地的 master 分支推送到 origin主机 的 master 分支。如果后者不存在,则会被新建。
查找命令
git help
:可以查找常用的命令。git help -a
:可以查看所有的命令。git help 指令
:可以查看输入指令的详细解释。
而git help
中包含 vi编辑器 ,使得我们可以通过 :j
:k
进行上下翻页, :q
退出, :wq
保存退出。
补充
在上面的示例中我们了解到了仓库和暂存区两个概念,聪明的读者就会发现,🤓👆🏻哎?!,直接提交到仓库是不是更加方便呢,还省去了许多步骤。如果你是这样想的,恭喜你,你失去了后悔药。
仓库的概念与理解:
仓库分为以下几个部分:
- 工作区(workspace):简单来说保存在本地的文件和目录等都属于工作区,而我们日常的代码修改就是在工作区进行的。例如前文提到的 a.txt 与 b.txt 。
- 暂存区(stage):其为工作区与本地仓库之间的一个过渡层,记录了工作区代码的状态(改动与否,改动内容),于 .git 目录中。
- 本地仓库(repository):记录了本地代码的状态,位于 .git 目录中。
状态的理解:
就是文件的修改状态,不用对文件本身进行多次备份。类似于:
- 文件第一行:将XXX替换成了XXX。
- 文件第二行与第三行中间:添加了一行内容,"......"。
也可以理解为文件的修改记录,这样我们就可以知道上次对这个文件进行哪些操作和修改,也可以恢复到修改前的状态。
那么为什么需要仓库和暂存区呢?
在实际开发中,我们需要编辑与修改多个文件,其与多个功能相关,而每个功能应该单独做成一次提交,这样才能保证提交历史的清晰。现实没有"后悔药",但是 git 有,机器也会犯错,更何况人呢?暂存区这个"后悔药"就是为了选择提交,例如当我们在开发一个功能,其中包含A,B两个文件,在我们还在编写B文件时,发现A文件有Bug,这时我们就可以回头修改A文件的Bug,再进行B文件的开发,最后组成一个提交逻辑(任务)进行一次commit -m
,每次commit -m
都要慎重规范,讲清楚任务,围绕开发需求,这样的话就可以提高提交版本历史记录的清晰,方便回溯。
小结:
本文概括了git的基本介绍,日常使用的命令及操作,适合初学者阅读和学习。
---欢迎各位点赞、收藏、关注,如果觉得有收获或者需要改进的地方,希望评论在下方,不定期更新