前端学习13 git使用

1.git 概述

Git 是一个分布式版本控制系统,用于跟踪文件的变化,尤其是程序代码的变化。它由 Linus Torvalds(Linux 操作系统的创建者)于 2005 年开发。Git 允许开发者在本地创建代码仓库,进行文件修改、提交等操作,直到准备好与远程仓库同步。Git 提供强大的分支管理功能,可以在不干扰主分支的情况下开发新功能或修复 bug。

Git 与其他版本控制系统的区别

集中式版本控制系统(如 SVN):所有的代码版本保存在一个中央服务器中。每次操作都需要连接到服务器。

分布式版本控制系统(如 Git):每个开发者的工作站都有完整的代码历史记录,可以脱离服务器工作,直到需要同步时才连接(通过push pull操作)。

2.Git的核心概念

Git本地有四个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)、git仓库(Remote Directory)。文件在这四个区域之间的转换关系如下: alt

Workspace:工作区,就是你平时存放项目代码的地方

Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

Repository:仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

git的工作流程一般是这样的:

1、在工作目录中添加、修改文件;

2、将需要进行版本管理的文件放入暂存区域;

3、将暂存区域的文件提交到git仓库。

因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

3.文件状态

Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged。

Unmodify : 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified。如果使用git rm移出版本库, 则成为Untracked文件。

Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过,返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改。

Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存,文件状态为Modified。 alt

新建文件--->Untracked

使用add命令将新建的文件加入到暂存区--->Staged

使用commit命令将暂存区的文件提交到本地仓库--->Unmodified

如果对Unmodified状态的文件进行修改---> modified

如果对Unmodified状态的文件进行remove操作--->Untracked

4.常见命令

1、新建代码库

//在当前目录新建一个Git代码库
 git init
//新建一个目录,将其初始化为Git代码库
git init [project-name]
//下载一个项目和它的整个代码历史
git clone [url]

2、查看文件状态

//查看指定文件状态
git status [filename]
//查看所有文件状态
git status

3、工作区<-->暂存区

//添加指定文件到暂存区
git add [file1] [file2] ...
//添加指定目录到暂存区,包括子目录
git add [dir]
//添加当前目录的所有文件到暂存区
git add .
//当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用(⚠️)
git rm file_path
//当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 这个时候直接push那边这个文件就没有,如果push之前重新add那么还是会有。
git rm --cached file_path
//直接加文件名   从暂存区将文件恢复到工作区,如果工作区已经有该文件,则会选择覆盖
//加了【分支名】 +文件名  则表示从分支名为所写的分支名中拉取文件 并覆盖工作区里的文件
git checkout

4、工作区<-->资源库(版本库)

//将暂存区-->资源库(版本库)
git commit -m '该次提交说明'
//如果出现:将不必要的文件commit 或者 上次提交觉得是错的  或者 不想改变暂存区内容,只是想调整提交的信息
//移除不必要的添加到暂存区的文件
git reset HEAD 文件名
//去掉上一次的提交(会直接变成add之前状态)   
git reset HEAD^ 
//去掉上一次的提交(变成add之后,commit之前状态) 
git reset --soft  HEAD^ 

5.分支

在平时的开发中,我们通常会在 Git上建立多个分支,以方便代码的管理与维护,比如【master-dev】开发模型,这种开发模型就是 master存放已完成的代码,而 dev是平常用来开发的分支,开发完成后再将 dev分支合并到 master分支,当然有的大型项目还会有 bugfix这种专门修bug的分支或者有 product等等其他分支。 alt 我们通常有两种方式进行分支整合,

5.1合并(git merge)

整合分支最容易的方法是 merge 命令。 它会把两个分支的最新快照以及二者最近的共同祖先进行三方合并,合并的结果是生成一个新的快照(并提交)。

git switch master
  
git merge experiment

//没有冲突时不需要下方的命令。有冲突时,就修改冲突文件,再add然后commit该文件,如下:
git add readme.txt 
  
git commit -m "conflict fixed"

alt

合并是一个非常直观和简单的操作,特别适用于多人协作开发的场景。它保留了分支的历史记录,显示了每个分支的贡献。

5.2 变基(git rebase)

实,还有一种方法:你可以提取在 C4 中引入的补丁和修改,然后在 C3 的基础上应用一次。 在 Git 中,这种操作就叫做 变基(rebase)。 你可以使用 rebase 命令将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样。

git rebase master experiment

//或者

git switch experiment
  
git rebase master

alt 要用变基需要遵守一条准则:如果提交存在于你的仓库之外,而别人可能基于这些提交进行开发,那么不要执行变基。

变基的主要好处是,它可以保持一个干净的提交历史记录。相比之下,合并会产生很多合并提交,使得提交历史变得混乱。变基通常在工作完成后的合并之前使用,以便保持提交历史的整洁和易于理解。

5.3 如何选择合并或变基

通常情况下,合并是更安全和推荐的方法。它可以处理更复杂的合并操作,包括有冲突的情况。合并可以保留每个分支的完整历史记录,使得问题定位和回滚更加容易。

然而,当我们需要保持提交历史记录的整洁和易于理解时,变基是更合适的选择。它可以将一个干净的提交历史记录应用到主分支中,使得整个项目的历史记录更易于理解和追踪。

#前端学习#
全部评论

相关推荐

评论
2
3
分享

创作者周榜

更多
牛客网
牛客企业服务