一、序言
今天聊聊 Git。
二、开发的问题
- 在开发项目时,我们的代码都是直接放在本地的机器上的。如果本地机器出现了问题,怎么办?
- 在企业中,开发项目都是团队协作,一个团队共同维护一个项目该如何处理?
- 团队共同维护一个项目,大概率会发生冲突(例如:A 与 B 都改了同一行代码)该如何解决?
- 项目是不断演进的,但是新版本有问题我们需要回溯到某个时间节点的某个版本呢?
三、什么是版本控制
版本控制(Version Control System,简称 VCS)是一种管理文件和代码变化的系统,它允许开发者跟踪文件的修改、恢复先前的版本以及比较不同版本之间的差异。版本控制系统记录了文件的历史变更,使得开发者可以方便地回溯到特定时间点的代码状态,从而更好地管理项目的发展历程。
版本控制系统通常包括以下核心功能:
- 版本追踪:记录文件的每一次修改,包括修改内容、修改者和修改时间等信息。
- 版本恢复:允许开发者在需要时回溯到历史版本,恢复特定时间点的文件状态。
- 分支管理:支持创建分支,使得开发者可以并行开发不同的功能或修复不同的 BUG,而不会影响主干代码。
- 代码合并:允许将不同分支或不同版本的代码合并到一起,确保代码的一致性和完整性。
- 冲突解决:当多个开发者同时修改了同一个文件,版本控制系统可以帮助解决代码冲突,确保修改的有效合并。
- 团队协作:提供多用户协作的支持,使得团队成员可以共享和管理代码的变更。
常见的版本控制系统包括:
- Git:目前最流行的分布式版本控制系统,用于跟踪文件的变化并协作开发项目。
- Subversion(SVN):集中式版本控制系统,类似于 Git,但与 Git 不同的是它使用集中式的存储库来管理文件版本。
- Mercurial:另一个分布式版本控制系统,与 Git 类似,但使用起来更简单。
- Perforce:用于大型项目和团队的商业版本控制系统,具有高性能和可定制性。
- Team Foundation Version Control(TFVC):Microsoft 开发的版本控制系统,主要用于 Visual Studio Team Services(VSTS)和 Team Foundation Server(TFS)。
它们在实现版本控制的基本功能上有所不同,但都能满足开发者对版本管理的需求。版本控制系统在软件开发过程中扮演着重要的角色,有助于提高团队的协作效率、保证代码的质量和可维护性。
四、什么是 Git
Git 是一个分布式版本控制系统,它是由 Linux 之父 Linus Torvalds 开发的,用于管理软件开发过程中的源代码版本。它的主要功能包括跟踪文件的变化、记录文件的历史版本、协作开发、代码审查等。Git 的设计目标是速度、简单性、非线性开发(允许同时进行多个分支的开发)和完全分布式。
Git 是一种非常强大、灵活且广泛应用的版本控制系统,对于任何需要管理代码变更的项目都是非常有用的工具。Git 允许开发者在一个项目中进行版本控制。它可以帮助开发团队在多人协作开发时更好地管理代码,并且可以在不同的开发环境之间轻松地共享和同步代码。Git 也是开源的,因此任何人都可以免费使用它,并且它拥有庞大的社区支持,有许多优秀的工具和扩展可以与之配合使用。
五、Git 工作流程
- 开发人员第一次使用
git clone
命令从远程库克隆项目到本地库。如果本地已经存在该项目则使用git pull
命令更新本地的项目 - 开发人员在本机的工作区打开本地库中的项目进行开发
- 工作区的项目有变更之后,使用
git add
命令将工作区的变更放入暂存区 - 暂存区有新内容之后,使用
git commit
命令将暂存区内容提交到本地库 - 此时,本地项目的最新版本已经保存到了本地库,但是远程库还是旧版本
- 使用
git push
命令将本地库的最新变更提交到远程库
每一个开发人员都可以通过上述的流程拉取项目,开发项目,推送最新的代码,从而实现了团队开发项目。
六、Git 常用命令
-
初始化一个新的 Git 本地仓库
git init
-
从远程仓库克隆一个仓库到本地
git clone [url]
-
将文件添加到暂存区
git add [file]
-
将所有修改过的文件添加到暂存区
git add .
-
将暂存区的文件提交到本地仓库,并附上提交信息
git commit -m "[message]"
-
显示工作目录的状态,显示已暂存和未暂存的改动
git status
-
显示工作目录中当前文件和暂存区域的差异
git diff
-
显示已暂存的内容与上次提交之间的差异
git diff --cached
-
显示提交日志
git log
-
列出本地分支
git branch
-
创建一个新的分支
git branch [branch_name]
-
切换到指定分支
git checkout [branch_name]
-
将指定分支合并到当前分支
git merge [branch_name]
-
拉取远程仓库的更新
git pull
-
将本地提交推送到远程仓库
git push
-
查看远程仓库信息
git remote -v
-
添加一个新的远程仓库
git remote add [name] [url]
-
移除一个远程仓库
git remote remove [name]
-
从暂存区中移除指定文件,但保留在工作区中的修改
git reset [file]
-
重置暂存区和工作目录,与最新提交保持一致
git reset --hard
-
将当前的修改暂存起来,并将工作区恢复到上一次提交时的状态
git stash
-
列出所有标签
git tag
-
创建一个新的标签
git tag [tag_name]
-
切换到指定标签
git checkout [tag_name]
-
删除文件,并将这次删除放入暂存区
git rm [file]