git从入门到大牛
什么是git
Git 是一个版本控制系统,用于管理代码和其他文本文件的更改。
它可以记录文件的修改历史,允许用户独立开发分支,合并修改,回滚到旧版本等操作。
Git 是一种分散式版本控制系统,意味着每个开发者都可以在本地存储完整的 Git 存储库,并可以与其他开发者协同工作。
Git 是由 Linus Torvalds 开发的,最初是为管理 Linux 内核的开发而创建的。
理解版本控制
简单理解版本控制,比如我们要改一个文件,又担心会改错,就会先备份一下。比如a.txt文件,先复制出来一个文件命名为a1.txt。这样就有2个文件了,即可以保存了历史记录,又可以修改。
版本控制主要有2个优点:
- 保留了历史记录
- 如果修改出错可以恢复数据
版本控制软件
大部分的版本控制软件都是基于版本控制的理念开发出来的。
一般可以支持如下几个功能:
- 文件保存和管理
- 版本控制
- 不同版本文件对比
- 多人协作
- 提供客户端工具
常见的版本控制软件包括:
-
Git: 最流行的分布式版本控制系统,用于管理软件源代码和其他类型的文件。
-
Subversion(SVN): 集中式版本控制系统。
-
Mercurial(Hg): 另一个分布式版本控制系统。
-
Perforce: 一种专有的集中式版本控制系统,用于大规模开发环境。
-
CVS: 一个基于网络的开源版本控制系统,用于管理软件开发项目。
-
Bitbucket: 面向团队的 Git 代码托管和协作工具。
-
SourceForge: 开源项目托管服务,提供版本控制工具和协作功能。
-
GitHub: 基于 Git 的代码托管服务,为开源项目和私有项目提供源代码管理、协作和问题跟踪功能。
-
GitLab: 另一个基于 Git 的代码托管服务,提供源代码管理、持续集成/持续交付和协作功能。
-
Apache Subversion: 开源版本控制系统,被广泛用于开源软件和商业项目。
远程仓库
Git 远程仓库是指存储在互联网或局域网上的 Git 仓库,在本地计算机上可以通过网络访问和操作,实现代码共享和协作开发。
远程仓库可以是自己搭建的 Git 服务器,也可以是第三方 Git 托管服务提供商,如 GitHub、GitLab 和 Bitbucket 等。
在远程仓库中,开发人员可以上传自己的代码,查看历史版本,协同开发、合作等操作。
其中最常用的操作是 clone(克隆)和 push(推送)。
通过克隆将远程仓库的代码复制到本地,进行代码修改和提交;通过推送将本地代码提交到远程仓库中,供其他人访问和使用。
除了基本的 clone 和 push 操作外,Git 还提供了其他一些操作,如 pull(拉取)、fetch(抓取)、branch(分支)、tag(标签)等,用于管理远程仓库和本地仓库之间的关系和数据同步。
git安装
git官方网站提供了git的安装包以及客户端工具的安装包,并支持windows mac linux主流系统。
进入网站点击downloads进入下载界面。
根据个人电脑系统去下载对应的安装包即可。
windows 安装
双击安装文件,点击下一步。
在此处可以选择默认编辑器。
后面一直点下一步即可。
git 客户端安装
下载客户端
安装
双击安装包会自动安装,安装完成会弹出界面。
界面介绍
- 首先需要登陆。可以登陆到github,也可以登陆其他企业级git平台,如gitee。
登录进来之后,可以看到下面界面。提供了三个按钮:
- clone远程仓库项目
- 新增本地仓库项目
- 添加已存在的项目
客户端操作
仓库管理
创建本地仓库
打开客户端,点击"create a new repository on your hard dive...";创建本地仓库。
输入需要填入的内容并选择本地文件夹。
点击 create repository即可创建本地仓库。
创建之后可以看到如下界面:
桌面创建了一个命名为test1的文件夹。
切换本地仓库
再次新建一个本地仓库
在左侧可以看到一个仓库列表,点击其中一个仓库,即可选择为当前仓库
删除本地仓库
如果需要删除本地仓库,在左侧列表选择一个仓库点击右键,从右键菜单选择remove。
如果只是从列表移除,不需要选中 also move this repository to trash。如果需要从磁盘也删除的话,需要。
文件操作
创建文件
在test1本地仓库文件夹新建一个文件a.txt。
客户端看到有文件变化。
点击commit to main ,文件添加到本地仓库。
再新增一个带内容的文本文件,内容是红色的,表示未添加到本地仓库。
修改文件
修改文本文件内容,查看客户端,可以看到文件修改记录。绿色的地方代表修改后的新内容。
删除文件
文件删除以后,客户端这里也会发生变化。
新增/修改/删除 标志
如果文件做了新增/修改/删除的操作,如何一眼可以看出来操作类型,可以通过标志查看,如下:
可以看到
- 绿色标志:新增
- 黄色标志:修改
- 红色标志:删除
分支管理
在Git中,分支是指项目代码的不同版本,即在代码库中分出来的不同的代码分支。一般来说,在开发过程中,我们会通过创建不同的分支来进行不同的代码开发和管理。每个分支都是独立的,可以有自己的版本历史和提交记录。
Git分支的主要作用有两个:
-
实现不同的工作流程:如果有多人在同一个项目上工作,那么每个人可以在各自的分支上进行工作,避免某个人的代码直接影响到其他人的工作。
-
版本控制:通过分支的创建和合并,可以实现不同版本代码的管理。
在Git中,主分支一般是master分支,其他的分支则可以根据需要进行创建。
创建分支
点击客户端 current branch,点击new branch即可创建分支。
输入分支名称即可。比如我创建一个开发(dev)分支。
点击create branch之后,会提示是留着当前分支还是切换到新建的分支。
选择留在当前分支,可以看到这里我们已经创建了一个新的分支。
切换分支
在分支列表选择要切换的分支,即可切换分支。
切换之后,当前分支就是打对号的这个分支。
切换到dev分支,在文件夹中新建一个新的文件,并提交。
合并分支
这个时候,在本地仓库的文件夹发现已经有c.txt文件了。
如果再切换到主分支,发现这个文件没有了。
那如何把dev分支的内容合并到主分支呢。
切换到主分支,点击按钮 choose a branch to merge into main。
选择要合并到分支,可以看到下面提示有一个commit需要合并到main分支。
合并之后,再查看文件夹,发现c.txt文件出现了。
标签管理
Git标签(Tag)是指向Git仓库中特定提交(commit)的指针。它类似于分支,但标签不会移动,它始终指向一个特定的提交。
标签可用于标记版本发布或重要里程碑,也可用于标识代码库的状态。
标签可以被签出(checkout)到工作目录中,以让用户直接使用已标记过的代码版本。
标签与分支一样,也可以共享、推送和拉取到远程仓库中。
创建标签
对于某一次的提交,可能是对多个文件的多个操作,可以创建标签用来标记着一次提交。
选择一次提交,右键点击create tag...
输入内容即可。可以看到这一次的提交有一个标签内容。
删除标签
右键选择commit,点击delete tag 即可删除标签。
远程操作
上面的操作都是针对本地仓库,我们知道git是分布式版本控制软件,最终的代码还是需要上传到中央仓库。
远程仓库可以是自己搭建的 Git 服务器,也可以是第三方 Git 托管服务提供商,如 GitHub、GITEE 、GitLab 和 Bitbucket 等。
GitHub登录
首先登录GitHub官网https://github.com/。
注册账号并登录。
注册登录后界面如下,在左侧有【新增仓库】的按钮。
创建一个远程仓库
客户端登录GitHub
点击File,选择options。
可以看到有两个登录按钮。
点击第一个按钮,选择 Continue with browser。
即可登录成功,登录之后会看到我们已经创建好的远程仓库。
选择仓库,可以clone远程仓库到本地仓库。
PUSH文件到远程仓库
在clone远程仓库到本地之后,我们可以创建文件提交到本地仓库。
提交之后,点击public branch按钮。
去gitHub查看,文件已经提交到了远程仓库。
命令行操作
在windows系统,使用命令行,在需要使用命令行的文件夹右键之后,选择 "git base here"即可。
创建仓库
Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。
bash
git init
使用上面命令,可以使得当前文件夹初始化为Git仓库。
bash
git init 文件夹
使用上面命令可以指定文件夹初始化为git仓库。
初始化仓库后,仓库目录会创建一个.git的文件夹。
克隆clone
我们使用 git clone 从现有 Git 仓库中拷贝项目。
bash
git clone <repo>
repo : 远程仓库地址
如clone下面的这个项目,可以使用命令:
bash
git clone https://github.com/sudolei/sjky.git
配置 config
使用git config可以查看当前配置。
bash
git config --list
执行后可以查看到git当前配置信息
使用下面命令修改当前配置,针对当前仓库配置:
bash
git config -e
使用下面命令修改当前配置,针对所有仓库配置:
bash
git config -e --global
基本操作
add
git add 命令可将该文件的修改添加到暂存区。
通过运行 git add 命令,你可以告诉 Git 哪些文件的修改应该包含在下一次提交(commit)中。
status
git status 是一个用于查看 Git 仓库当前状态的命令。
git status 命令可以查看在你上次提交之后是否有对文件进行再次修改。
commit
git commit 命令将暂存区内容添加到本地仓库中。
提交暂存区到本地仓库中:
git commit -m [提交内容信息]
diff
git diff 命令比较文件的不同,即比较文件在暂存区和工作区的差异。
git diff 命令显示已写入暂存区和已经被修改但尚未写入暂存区文件的区别。
rm
将文件从暂存区和工作区中删除。
reset
回退版本。
git reset 命令用于回退版本,可以指定退回某一次提交的版本。
git reset 命令语法格式如下:
bash
git reset [--soft | --mixed | --hard] [HEAD]
实例:
bash
$ git reset HEAD^ # 回退所有内容到上一个版本
$ git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本
$ git reset 052e # 回退到指定版本
checkout
切换分支
以下命令允许你从当前分支切换到指定的分支 :
bash
git checkout <branch-name>
日志 log
git log
查看历史提交记录
git blame
以列表形式查看指定文件的历史修改记录
远程操作
git remote
git remote 命令用于用于管理 Git 仓库中的远程仓库。
git remote 命令提供了一些用于查看、添加、重命名和删除远程仓库的功能。
以下是 git remote 命令的常见用法:
- git remote:列出当前仓库中已配置的远程仓库。
- git remote -v:列出当前仓库中已配置的远程仓库,并显示它们的 URL。
- git remote add <remote_name> <remote_url>:添加一个新的远程仓库。指定一个远程仓库的名称和 URL,将其添加到当前仓库中。
- git remote rename <old_name> <new_name>:将已配置的远程仓库重命名。
- git remote remove <remote_name>:从当前仓库中删除指定的远程仓库。
- git remote set-url <remote_name> <new_url>:修改指定远程仓库的 URL。
- git remote show <remote_name>:显示指定远程仓库的详细信息,包括 URL 和跟踪分支。
git push
git push 命令用于从将本地的分支版本上传到远程并合并。
git fetch
从远程获取代码库。
git fetch是一个常用的命令,用于从远程仓库获取最新的提交历史和分支信息,但并不自动合并或修改本地代码。
当执行 git fetch命令时,它会执行以下操作:
- 检查远程仓库是否有新的提交或分支。
- 获取远程仓库的最新提交历史,但不会应用到当前工作目录中。
- 更新本地仓库的远程分支指针,指向远程仓库的最新提交。
bash
git fetch
git fetch origin
1. 拉取远程仓库的所有远程分支的最新Commit-ID到「.git/FETCH_HEAD」文件中.
若有多个分支则FETCH_HEAD内会有多行数据,首行为 git fetch 时所在分支的同名远程分支
2. 远程仓库被clone到本地后,被push过代码的远程分支会在「.git\refs\remotes\origin」路径下创建或更新其在本地的副本
git fetch origin release FETCH_HEAD内只有1行数据,记录的是 git fetch时指定的远程分支的最新Commit-ID
git fetch origin release:dev 基于远程release分支创建本地dev分支(但不会切换到该分支)
1. 果不存在本地dev分支,则会自动创建一个新的本地dev分支
2 果存在本地dev分支,并且满足fast forward条件, 则自动合并两个分支,否则,会阻止以上操作
git fetch origin master:branch2
git fetch origin :branch2 省略写法表示:远程仓库分支为默认分支master
git merge
git merge会将多个提交序列合并进一个统一的提交历史。在最常见的使用场景中,git merge被用来合并两个分支。
git pull
git pull 命令用于从远程获取代码并合并本地的版本。
git pull 其实就是 git fetch 和 git merge FETCH_HEAD 的简写。